QuantumGrid有另存为xls的功能,其他的功能也很强大,可以考虑采用呀

解决方案 »

  1.   

    dbgrid导入word或excel:
    procedure SaveToExcelFile(DbgridName: TDbGrid);
    var
      XLApp: Variant;
      Sheet: Variant;
      WordApp,WordDoc,WordParagraph,WordRange,WordTable:variant;
      I, J: Integer;
      SaveDialog:TSaveDialog;
      pBookMark: TBookMark;
      StrSaveFile:string;
      IntFileType:integer;
      SltRec,SltCol :integer;
      ColIndex,RowIndex : Integer;
    begin
         if dbgridname.DataSource.DataSet.IsEmpty then begin
            messagebox(application.Handle,'没有任何数据,不能进行保存',
                       '警告',mb_ok);
            abort;
         end;
         SaveDialog:=TSaveDialog.Create(Nil);
         SaveDialog.Filter := 'Microsoft Excel 文件|*.xls|Microsoft Word 文件|*.doc';
         SaveDialog.Execute;
         IntFileType:=SaveDialog.FilterIndex;
         StrSaveFile:=SaveDialog.FileName;
         if length(StrSaveFile)=0 then exit;
         try
           screen.Cursor:=crHourGlass;
           case  IntFileType  of
              1: begin
                    try
                      XLApp := CreateOleObject('Excel.Application');
                      XLApp.WorkBooks.Add(-4167);
                      XLApp.WorkBooks[1].WorkSheets[1].Name := '导出数据';
                      Sheet := XLApp.WorkBooks[1].WorkSheets['导出数据'];
                      J := 1;
                    except
                        MessageBox(GetActiveWindow,'无法调用Mircorsoft Excel! '+chr(13)+chr(10)+
                                 '请检查是否安装了Mircorsoft Excel。','提示',MB_OK+MB_ICONINFORMATION);
                        Exit;
                    end;
                    with Dbgridname.DataSource.DataSet do
                    begin
                      pBookMark := GetBook;
                      DisableControls;
                      for I:=0 to dbgridname.Columns.Count-1 do
                      begin
                         if dbgridname.Columns[I].Visible=False then
                            Continue;
                         Sheet.Cells[J,I+1] := dbgridname.Columns[I].Title.Caption;
                      end;
                      Inc(J);
                      First;
                      while not Eof do  begin
                            for I:=0 to dbgridname.Columns.Count-1 do begin
                                if dbgridname.Columns[I].Visible=False then
                                   Continue;
                                Sheet.Cells[J,I+1] := trim(dbgridname.DataSource.DataSet.Fieldbyname(dbgridname.Columns[i].FieldName).asstring);
                            end;
                            Inc(J);
                            Next;
                      end;
                      GotoBook(pBookMark);
                      FreeBook(pBookMark);
                      EnableControls;
                    end;
                    XLApp.activeworkbook.saveas(StrSaveFile);
                    Application.ProcessMessages;
                    XLApp.Application.Quit;
                end;
          2:  begin
              try
                if VarIsEmpty(WordApp) then
                  WordApp := CreateOleObject('word.Application');
                  WordDoc := WordApp.documents.add;
                  WordParagraph := WordApp.activedocument.paragraphs.add;
                  WordRange := WordParagraph.range;
                  WordRange.Font.Size := 15;
                  WordRange.Font.Name := '宋体';
              except
                   MessageBox(GetActiveWindow,'无法调用Mircorsoft Word! '+chr(13)+chr(10)+
                             '请检查是否安装了Mircorsoft Word。','提示',MB_OK+MB_ICONINFORMATION);
                   Abort;
              end;
              SltRec:=dbgridname.SelectedRows.Count;
              SltCol := 0;
              for j := 0 to dbgridname.Columns.Count-1 do begin
                  if dbgridname.Columns[J].Visible then
                     SltCol := SltCol +1;
              end;          WordRange := WordApp.ActiveDocument.Content;
              WordTable:= WordApp.activedocument.tables.add(WordRange,SltRec + 1,SltCol);
              ColIndex := 1;          for j := 0 to dbgridname.Columns.Count-1  do begin
                  if (dbgridname.Columns[j].Visible = false) then
                     Continue;
                  WordTable.Cell(1,ColIndex).Range.InsertAfter(dbgridname.Columns[j].Title.Caption);
                  ColIndex := ColIndex + 1;
              end;          RowIndex := 2;
              ColIndex := 1;
              with  dbgridname.DataSource.DataSet do begin
                    First;
                    pBookMark := GetBook;
                    DisableControls;
                    while not Eof do  begin
                          for j := 0 to dbgridname.Columns.Count-1 do begin
                            if (dbgridname.Columns[j].Visible<>false) then
                            begin
                                WordTable.Cell(RowIndex,ColIndex).Range.InsertAfter
                                (dbgridname.DataSource.DataSet.Fieldbyname(dbgridname.Columns[j].FieldName).asstring);
                                ColIndex := ColIndex + 1;
                             end;
                          end;
                          RowIndex := RowIndex + 1;
                          ColIndex := 1;
                          Next;
                    end;
                    GotoBook(pBookMark);
                    FreeBook(pBookMark);
                    EnableControls;
              end;
              WordApp.activedocument.saveas(StrSaveFile);
              Application.ProcessMessages;
              WordApp.Application.Quit;
            end;
         end;
        Finally
           SaveDialog.Free;
           screen.Cursor:=crDefault;
        end;
    end;
      

  2.   

    我给你代码:
    var
    aSheet:Variant;
    i:integer;begin
    //显示Ms-excel的执行过程
    ExcelApplication1.Visible[0]:=True;
    ExcelApplication1.WorkBooks.Add(xlWBATWorksheet,1);
    aSheet:=ExcelApplication1.Worksheets.Item[1];
    aSheet.cells[1,1].Value:='会员卡号';
    aSheet.cells[1,2].Value:='会员姓名';
    aSheet.cells[1,3].Value:='累计消费金额';
    aSheet.cells[1,4].Value:='职业';
    aSheet.cells[1,5].Value:='会员级别';
    aSheet.cells[1,6].Value:='专卖店名称';
    //asheet.cells[20,1].Value:='总计';
    i:=2;
    with adoquerytotal do
     begin  first;   while not eof do begin
      aSheet.cells[i,1].Value:=FieldbyName('hykh').Asstring;
      aSheet.cells[i,2].Value:=FieldbyName('name').Asstring;
      aSheet.cells[i,3].Value:=FieldbyName('column1').Asstring;
      aSheet.cells[i,4].Value:=FieldbyName('job').Asstring;
      aSheet.cells[i,5].Value:=FieldbyName('hyjb').Asstring;
      aSheet.cells[i,6].value:=FieldbyName('zmdname').AsBoolean;
      i:=i+1;  next;
     //aSheet.SaveAs('d:\qqq.xls');
     // OleContainer1.CreateobjectFromFile('d:\qqq.xls',false);
    // aSheet.Application1.quit;  end;
    end;
      

  3.   

    很感谢: cg1120(代码最优化-§雨后看见彩虹……§) 
    你的代码很全,但是我用XLApp := CreateOleObject('Excel.Application');时,出了问题:
    [Error] Unit1.pas(65): Undeclaredidentifier: 'CreateOleObject'
    请问这是什么原因
      

  4.   

    use comobj,excel97,你就可以'createoleobject'了