请辛苦下看完下面的代码:procedure TFrm_Main.Btn_ExcelReportClick(Sender: TObject);
var
  i, j : integer;
  my_excel, worksheet, workbook: olevariant;
begin
  if Initialize_excel(my_excel, workbook, worksheet) then
  begin
    for i := 0 to StringGrid1.RowCount - 1 do
    begin
      for j := 0 to StringGrid1.ColCount - 1 do
      begin
        if (StringGrid1.Cells[j,i] <> '') then
        begin
          /////////////将StringGrid1.Cell[j,i]写到excel里。////////
          worksheet.cells(i + 1, j + 1) := StringGrid1.Cells[j,i];
          /////////////////////////////////////////////////////////          ///////////////设置居中////////////////////////////////
          worksheet.Range[worksheet.cells[i + 1, j + 1],worksheet.cells[i + 1, j + 1]].select;
          my_excel.selection.HorizontalAlignment := xlCenter;
          my_excel.selection.VerticalAlignment := xlCenter;
          //////////////////////////////////////////////////////
        end;
      end;
    end;
  end;
end;function TFrm_Main.Initialize_excel(var excel, workBook,
  sheet: OleVariant): boolean;
begin
  result:= false;  try
    excel := GetActiveOleObject('Excel.Application');
    excel.application.visible := true;
    if NOT VarIsEmpty(excel) then
    begin
      workBook := excel.ActiveWorkbook;
      sheet := workBook.Sheets.Add;
    end;
  except
    excel := CreateOleObject('Excel.Application');
    workBook := excel.WorkBooks.Add;    workbook := excel.application.workbooks[1];
    sheet := workbook.worksheets.item[1];
    excel.application.visible := true;
  end;  if  VarIsEmpty( excel ) then
  begin
    ShowMessage( '不能装载Excel对象,请先安装Excel或检查Excel的设置!' );
    result :=false;
    Exit;
  end
  else
    excel.Caption := '新亨镇同乡管理系统打印报表';  result :=true;
end;
运行:点击“打印”按钮,就弹出一个"Debugger Exception Notification"的警告对话框对话框提示信息:Project XXXProject.exe raise exception class EOleSysError
   with message"操作无法使用".Process stopped.Use Step or Run to continue. 点击 ok,Run
      
 过了一会,这时就(没点击打印按钮)自动启动生成代码所要求的Excel文件。
  
 这是怎么个回事,请各位指点指点!

解决方案 »

  1.   

    给你点各人意见
    如果想将数据导入到电子表格中形成报表打印,你大可不必操作Com 电子表格,这样很麻烦,你可以直接操作电子表格控件TSpreadSheet,你可以在Delphi中Install Component 安装OWC组件,其中就有电子表格控件,虽然功能不如电子表格强大,但足够用了,操作它,可比直接操作电子表格方便多了,综合性价比极高,可以考虑用一下,这样你的问题可能就少多了,当然也同样是在操作Com组件,但那可是在delphi中直接对控件操作,思路,方法,控制的灵活性都好一些,你也可以在业余时间充分发掘一下OWC的功能,他有数据仓库的前端操作界面,透视表,透视图,功能巨好!!!!
    如果你不想采用:
    那么你注意一下你操作电子表格的方式,你用的是运行期判定,这种方法编写的程序,在编译期间根本查不出来错误来,你应该用导入“类型库”的方法,程序在编译期间就可以查出大部分的错误!相对好一些,编写程序时不推荐用你的方法;
      

  2.   

    to 小奇:感谢您的提示    请问何为"导入“类型库”方法"?to 平:没有出现上述问题,能直接操作Excel并生成,这是怎么回事?我想知道原因。
          
          对了,补充上面的问题:按F9 运行有error提示
              TFrm_Main.Initialize_excel  never be used
      

  3.   

    [Hint]MainUnit.pas(160):Value assigned to'TFrm_Main.Initialize_excel' never used
      

  4.   

    stone565(石头)
    电子表格本身是一个Com程序,要操作Com程序,一个好的方法就是导入类型库的方法,这样的接口函数全部可以看见;程序函数在编译前即可绑定;而你用的是后绑定,只有在运行期调用了该函数才能检查出错误,所以不推荐你那种操作Com的方法;而使用导入类型库的方法,事先得知电子表格的类型库,这样在编译期间即可检查出错误;而不是在编译期,闭着眼睛瞎猜函数是什么,又没有,函数对不对;
    类型库是每一个Com程序都具有的一个东东,相当于程序的外壳,你可用Delphi的import type的方法,把他的外壳拔下来,就形成了类型库,里面描述了这个Com 程序的接口,函数,事件,常量等信息
      

  5.   

    那这些程序是以 .pas 还是 .dpk