//使用OleServer, Excel2000procedure GenXlsFile(DBGrid: TDBGrid; Fn: string; Vis: Boolean);
//uses ComObj;
var
  ExcelApp: Variant;
  i, j: integer;
begin
  try
    ExcelApp := CreateOleObject('Excel.Application');
  except
    application.MessageBox('系统中的MS Excel软件没有安装或安装不正确!', '错误', MB_ICONERROR + MB_OK);
    exit;
  end;
  ExcelApp.visible := vis;
  try
    excelapp.caption := '应用程序调用 Microsoft Excel';
    ExcelApp.WorkBooks.Add;
    //写入标题行
    for i := 1 to DBGrid.Columns.Count do //sDataSet.Fields.Count do
    begin
      //if DBGrid.Columns[i - 1].Visible then
      ExcelApp.Cells[1, i].Value := (DBGrid.Columns[i - 1].Title.Caption);
    end;
    DBGrid.DataSource.DataSet.First;
    i := 2;
    while not DBGrid.DataSource.DataSet.Eof do
    begin
      for j := 0 to DBGrid.Columns.Count - 1 do //sDataSet.Fields.Count-1 do
      begin
          //if DBGrid.Columns[j].Visible then
        ExcelApp.Cells[i, j + 1].Value := DBGrid.DataSource.DataSet.FieldByName(DBGrid.Columns[j].FieldName).AsString; //sDataSet.Fields[j].AsString;
      end;
      DBGrid.DataSource.DataSet.Next;
      i := i + 1;
    end;
    DBGrid.DataSource.DataSet.First;
    if application.MessageBox('数据导出完成.确认保存吗?', '问题', MB_ICONQUESTION + MB_YESNO + MB_DEFBUTTON1 + MB_SYSTEMMODAL) = IDYES then
    begin
      if not ExcelApp.ActiveWorkBook.Saved then
        ExcelApp.ActiveWorkBook.SaveAs(fn);
    end
    else begin
      ExcelApp.ActiveWorkBook.Saved := True; //不保存
    end;
  finally
    excelapp.quit; //退出EXCEL软件
  end;
end;

解决方案 »

  1.   

    我编的程序也是一样的。OleServer,我在机子上安装了Excel2000的,但是报错。
      

  2.   

    user comobj;
    你们差这个单元文件
      

  3.   

    你的退出有问题 
    并且你最好在程序中控制workbook and worksheet
       myworksheet1,MyExcel,MyWorkbook:Variant;
    顺序:MyExcel.disconnect MyExcel.quit MyExcel.free myworksheet1.free MyWorkbook.free
      

  4.   

    麻烦问一下楼上这位大哥。comobj这个单元文件是用来做什么用的!谢谢!
      

  5.   

    你用到了comobj这个单元的函数的
    所以需要use