我想把查询结果导出到Excel中。坛子里有很多这方面的帖子,我也看了,但不知道如何入手!?
下面是我从坛子里copy的一段代码,调试一开始处就出错!
procedure TF_EpIqSyHCV.BitBtn_excelClick(Sender: TObject);
var 
  i,j,row,nall:integer;
  ExcelApplication1:TExcelApplication;  //提示错误[Error]Undeclared identifier:'TExcelApplication'  
  ExcelWorksheet1:TExcelWorksheet;
  ExcelWorkbook1:TExcelWorkbook;
begin
...
end;
不知道如何下手修改啊!请高手指教,是不是要加个单元什么的啊?电脑上用的是Excel2003,应该如何写代码?谢谢!

解决方案 »

  1.   

    OleServer, ExcelXP;ExcelXP可能需要根据office版本定,你在servers组件标签下放一个TExcelApplication上去就行了
      

  2.   

    数据查询出来显示在dbgrid,再从dbgrid导出excle.代码如下
    procedure TlinealertForm.BitBtn2Click(Sender: TObject);
    var
      eclApp,WorkBook:Variant;
      xlsFileName:string;
      iRowNow,iRowAll,iColNow,iColAll:integer;
    begin
      if DBGrid2.DataSource.DataSet.RecordCount <=0 then
      begin
        showmessage('数据为空!');
        exit;
      end;
      xlsFileName:='c:\test.xls';
      try  //创建excel;
        eclApp:=CreateOleObject('Excel.Application');
        WorkBook:=CreateOleObject('Excel.sheet');
      except
        Application.Terminate;
      end;
      try
        WorkBook:=eclApp.workbooks.add;
        iColAll:=DBGrid2.Columns.Count;
        iRowAll:=DBGrid2.DataSource.DataSet.RecordCount;
        iColNow:=1;
        while iColNow<=iColAll do//处理一行的不同列
        begin
          eclApp.cells(1,iColNow):=DBGrid2.Columns.Items[iColNow-1].Title.caption;
          Inc(iColNow);
        end;
        iRowNow:=2 ;//第一行留做标题
        begin//按格导入数据
          DBGrid2.DataSource.DataSet.First;
          while iRowNow<=iRowAll+1 do
          begin
    //                    DBGrid1.DataSource.DataSet.Fields[];
            iColNow:=1;
            while iColNow<=iColAll do//处理一行的不同列
            begin
              eclApp.cells(iRowNow,iColNow):=DBGrid2.Fields[iColNow-1].Text;
              Inc(iColNow);
            end;
            DBGrid2.DataSource.DataSet.Next;
            Inc(iRowNow);
          end;
        end;//按格导入数据
    //测试
    //        eclApp.cells(1,1):='test';
       savedialog1.InitialDir := ExtractFilePath(Application.ExeName);
            if SaveDialog1.Execute then
            begin
              xlsFileName := SaveDialog1.FileName + '.xls';
              ShowMessage('数据导出成功!'#13#10'导出文件为:' + xlsFileName);
              WorkBook.saveas(xlsFileName);
              WorkBook.close;
              eclApp.quit;
    //        end
    //        else
    //        begin
    //            ShowMessage('系统出错,请重新打开系统!');
            end;
      except
      ShowMessage('请检查是否正确安装MicroSoft Excel!');
      end;
    end;
      

  3.   

    也可将EXCEL当成一个数据库来连接,读取出来循环写入到ACCESS就行
      

  4.   

    procedure TDataManageFrm.DataExport(ADtset: TDtset;
      ADBGrid: TDBGrid);
    var
      ExcelApp: Variant;
      SaveFileDialog: TSaveDialog;
      SaveToFile: string;
      i, j: integer;
    begin
      if (not ADtset.Active) or (ADtset.RecordCount = 0) then Exit;
      SaveToFile := '';
      SaveFileDialog := TSaveDialog.Create(Application);
      SaveFileDialog.Filter := '*.xls|*.xls';
      if SaveFileDialog.Execute then
        SaveToFile := SaveFileDialog.FileName;
      if SaveToFile = '' then
        exit;
      screen.Cursor := crHourGlass;
      try
        ExcelApp := CreateOleObject('Excel.Application');
        ExcelApp.WorkBooks.Add;
        ExcelApp.WorkSheets[1].Activate;
        ExcelApp.ActiveSheet.Rows[1].RowHeight := 30;    for j := 0 to ADtset.FieldCount - 1 do
        begin
          ExcelApp.Cells[1, j + 1].Value := ADBGrid.Columns[j].Title.Caption;
        end;
        ADtset.First;
        for i := 0 to ADtset.RecordCount - 1 do
        begin
          for j := 0 to ADtset.FieldCount - 1 do
          begin
            ExcelApp.Cells[i + 2, j + 1].Value :=ADtset.FieldByName(ADBGrid.Columns[j].FieldName).AsString; 
            ExcelApp.ActiveSheet.Columns[j + 1].ColumnWidth := 15;
          end;
          ADtset.Next;
        end;
      finally
        try
          ExcelApp.ActiveWorkBook.SaveAs(SaveToFile);
          ExcelApp.ActiveWorkBook.saved := true;
          ExcelApp.visible := true;
        except on e: exception do
          begin
            MessageDlg(e.Message, mtInformation, [mbok], 0);
            ExcelApp.ActiveWorkBook.saved := false;
          end;
        end;
      end;
      screen.Cursor := CrDefault;
    end;
    以前自己學習的時候寫的,不知道LZ是不是要這樣的效果
      

  5.   

    按照4楼的指示,导入Excel成功了!但是原本是1005,1007的数据格式导入后却变成了10,051,007?
    单击单元格时显示的又是10051007
    奇怪?