日期:2014-05-17  浏览次数:20980 次

delphi中dbgrid导出到excel中发生错误"无效的类别字符串"
环境是windowsxp+excel2007,代码如下:
function DBGridToExcel(Grid:TDBGrid; SavefileName:string): Boolean;
var
ExcelApp:Variant;
i,j,x:Integer;
begin
    result:=false;
    ExcelApp:=CreateOleObject('Excel.Application');//出错的地方!!!
    ExcelApp.Visible:=True;
    //ExcelApp.Caption:=Caption;
    ExcelApp.WorkBooks.Add;

    (*导出标题*)
    i:=0;

    for j:=0 to Grid.FieldCount-1 do
    begin
      if Grid.Columns[j].Visible=true then
      begin
        ExcelApp.Cells[1,i+1].Value:=
          trim(Grid.Columns.Items[j].Title.Caption);
        i:=i+1;
      end;
    end;

   (*导出数据*)
    Grid.DataSource.DataSet.First;
    x:=2;

    while not Grid.DataSource.DataSet.Eof do
    begin
      i:=0;
      for j:=0 to Grid.FieldCount-1 do
      begin
        {设置单元格属性为“文本”}
        if Grid.Columns[j].Visible=true then
        begin
          ExcelApp.Cells[x,i+1].NumberFormatLocal:='@';
          ExcelApp.Cells[x,i+1]:=Trim(Grid.Columns.Items[j].Field.AsString);
          i:=i+1;
        end;
      end;
      inc(X);
      Grid.DataSource.DataSet.Next;
    end;
    {导出的数据存为对应路径的文件}
    ExcelApp.ActiveWorkbook.SaveAs(SavefileName);
   // ExcelApp.Quit;
    result:=true;
end;

在调用CreateOleObject时就出现了"无效的类别字符串"的错误。

当用其他电脑装的是windowsxp+office2003却是可以导出数据的,求帮助。
delphi Excel2007 DBGrid

------解决方案--------------------
 ExcelApp:=CreateOleObject('Excel.Application');//出错的地方!!!
这样写法有缺陷了,如果用户端有安装Excel的话就不用创建了,直接引用即可,否则才须创建的
多加一判断就行,用错误捕捉也行
------解决方案--------------------
这个应该是安装了那种精简版(第三方重新打包,缺少相应的注册表信息)的office,造成的,重新安装完整版的office就可以了