怎么样才能把DBGrid中的数据转存为Excel的格式啊?我想响应一个按钮的OnClick事件把DBGrid中的数据转存为Excel的格式!该怎么做啊?

解决方案 »

  1.   

    Var
      ExcelApp,MyWorkBook,Mysheet:Variant;
      i,J:Integer;
      SaveName:String;
    begin
      ExcelApp:=CreateOleObject( 'Excel.Application' );
      MyWorkBook:=CreateOleobject('Excel.Sheet');
      ExcelApp.Visible := True;
      ExcelApp.Caption := '应用程序调用 Microsoft Excel';
      MyworkBook:=ExcelApp.workBooks.Add;
      i:=1;
      For j:=0 to DBGrid1.Columns.Count-1 do
      Begin
        MyworkBook.WorkSheets[1].Cells[i,j+1].Value:=DBGrid1.Columns.Items[j].Title.Caption;
      End;
      While Not cdsOldData.Eof Do
      Begin
        Inc(i);
        for j:=0 to DBGrid1.Columns.Count-1 do
        Begin
          MyworkBook.WorkSheets[1].Cells[i,j+1].Value:= DBGrid1.DataSource.DataSet.FieldByName(Trim(DBGrid1.Columns.Items[j].Field.FieldName)).AsString;
          
        end;
        cdsOldData.Next;
      End;
      

  2.   

    上面有点错误:
    Var
      ExcelApp,MyWorkBook,Mysheet:Variant;
      i,J:Integer;
      SaveName:String;
    begin
      ExcelApp:=CreateOleObject( 'Excel.Application' );
      MyWorkBook:=CreateOleobject('Excel.Sheet');
      ExcelApp.Visible := True;
      ExcelApp.Caption := '应用程序调用 Microsoft Excel';
      MyworkBook:=ExcelApp.workBooks.Add;
      i:=1;
      For j:=0 to DBGrid1.Columns.Count-1 do
      Begin
        MyworkBook.WorkSheets[1].Cells[i,j+1].Value:=DBGrid1.Columns.Items[j].Title.Caption;
      End;
      While Not DBGrid1.DataSource.DataSet.Eof Do
      Begin
        Inc(i);
        for j:=0 to DBGrid1.Columns.Count-1 do
        Begin
          MyworkBook.WorkSheets[1].Cells[i,j+1].Value:= DBGrid1.DataSource.DataSet.FieldByName(Trim(DBGrid1.Columns.Items[j].Field.FieldName)).AsString;
          
        end;
        DBGrid1.DataSource.DataSet.Next;
      End;
      

  3.   

    为什么会报CreateOleObject这个错误啊?[Error] Unit1.pas(45): Undeclared identifier: 'CreateOleObject'
      

  4.   

    USES COMOBJ,EXCEL2000
    加入引用!!
      

  5.   

    var
      eclApp, WorkBook: Variant;
      xlsFileName: String;
      i, j: Integer;
      FieldValue: String;
      SaveDialog: TSaveDialog;
        begin
          messageDlg('在工资报盘前请确保关闭所有EXCEL表!',mtWarning,[mbok],0);
          SaveDialog:=TSaveDialog.Create(Application);
          SaveDialog.DefaultExt:='.xls';
          SaveDialog.Filter:= 'Excel文件|*.xls|所有文件|*.*';
       if savedialog.Execute=true then
          begin
             application.ProcessMessages;
             xlsFileName:= SaveDialog.FileName;
              try
               VarClear(eclApp);
                eclApp:=CreateOleObject('Excel.Application');
              except
                ShowMessage('您的机器里未安裝Microsoft Excel!');
                Exit;
              end;
              try
                 WorkBook:= eclApp.workBooks.Add;
                 dm.gz.Close;
                 dm.gz.SQL.Clear;
                 dm.gz.SQL.add('select * from gz_jbqkyue');
                 dm.gz.Open;
                 EclApp.ActiveSheet.Columns[3].NumberFormatLocal:='@';
                 DBGrid10.DataSource.DataSet.First;
                 for i:=0 to DBGrid10.Columns.Count-1 do
                  begin
                    eclApp.Cells[1,i+1]:=DBGrid10.Columns.Items[i].Title.Caption;
                  end;
                  for i:=0 to DBGrid10.DataSource.DataSet.RecordCount-1 do
                  begin
                     for j:=0 to DBGrid10.Columns.Count-1 do
                       begin
                           FieldValue:=DBGrid10.Columns[j].Field.AsString;
                           eclApp.Cells[i+2, j+1]:=FieldValue;
                        end;
                    DBGrid10.DataSource.DataSet.Next;
                      application.ProcessMessages;
                  end;
                if FileExists(xlsFileName) then
                  begin
                    if Application.MessageBox('文件已经存在!' + #13 + #10 +
                               '是否进行替换?', '提示', MB_OKCANCEL +
                               MB_ICONQUESTION + MB_SYSTEMMODAL) = IDOK then
                      begin
                        DeleteFile(PChar(xlsFileName));
                        WorkBook.Saveas(xlsFileName);
                      showmessage('工资报盘到EXECL文件成功,路径为:'+xlsFileName);
                        WorkBook.Close;
                        eclApp.Quit;
                        eclApp:= Unassigned;
                      end;
                    end
                else
                  begin
                    WorkBook.Saveas(xlsFileName);
                 howmessage('工资报盘到EXECL文件成功,路径为:'+xlsFileName);
                    WorkBook.Close;
                    eclApp.Quit;
                    eclApp:= Unassigned;
                  end;
              except
                screen.Cursor:= crdefault;
                ShowMessage('不能正确操作Excel文件。可能是該文件已被其他程序打开或系統错误,需要注销您的计算机。');
                WorkBook.Close;
                eclApp.Quit;
                eclApp:=Unassigned;
              end;
            end;
      

  6.   

    : Erice(白雪公猪) 
     我怎么只能显示标题啊。数据都显示不出来啊!!!!!
      

  7.   

    qdmis(爱上你我很快乐) 
    我试了你的方法也出了同样的问题,没有数据。只有标题!!!1
      

  8.   

    DBGrid可以导出到excel的话,Stringgrid导出到excel也应该可以吧?
    不过Stringgrid对数据的操作好像有一点不同,我现在还不是很熟悉,不知哪位大哥能给一下code?
      

  9.   

    qdmis(爱上你我很快乐:
    还有一个奇怪的问题。保存了的.xls文件直接打开什么都堪布到。但是先打开excel,从excel中大开它就能看到了。这是什么原因??
    再问个问题,我现在如何将这个文件中的数据装入数据库中对应的表中????