我在做报表的时候,先把报表做了模板,然后在生成数据的时候,先把模板拷贝到一个新位置,在拷贝和调用EXCEL的时候都有错误,我把源代码放到这里,希望各位大侠帮忙,给分100分。
拷贝:
procedure Tfrm_sl_ysxsajbc_ybb.copyfile(sFile, dFile: PAnsiChar);
var
F:TShFileOpStruct;
begin
F.wnd:=Handle;
F.wFunc:=FO_COPY; {操作方式}
F.pFrom:=sfile;
F.pTo:=dfile;
if fileexists(dfile) then
deletefile(dfile);
F.fFlags:=FOF_RENAMEONCOLLISION; {操作选项}
if ShFileOperation(F)<>0 then
MessageDlg('文件拷贝失败,请查找原因!!',mtError, [mbOk], 0);
end;
调用EXCEL
      if not copyfilee(s1,d1) then
       begin
        application.MessageBox('报表文件可能打开,请关闭它然后进行报表操作!!','提示',0);
        exit;
       end;         try
          ExcelApplication1.Visible[0]:=true;
          ExcelWorkBook1.ConnectTo(ExcelApplication1.Workbooks.Open(d1,
          EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,
          EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,0));
          ExcelWorkSheet1.ConnectTo(ExcelWorkbook1.Worksheets[1] as _WorkSheet);
          ExcelWorkSheet1.Activate;    Try
    ExcelApplication1.Connect;

解决方案 »

  1.   

    excel用ADO连,然后操作:给你个例子:http://218.56.11.178:8020/web/index.aspx-》软件基地-》DELPHI源码-》基础应用-》动态调用Excel数据表
      

  2.   

    试试这个:
    var
    filename:olevariant;
    {xlsname:string;
    i,row,column:integer;}
    begin
        filename:='c:\测试.xls';
        try
        excelapplication1.Connect;
        except
        messagedlg('是否确定安装Excel?',mtError,[mbOK],0);
        Abort;
        end;
        excelapplication1.Visible[0]:=True;
        excelapplication1.Caption:='测试';
        excelapplication1.Workbooks.Add(filename,0);
        excelWorkbook1.ConnectTo(excelapplication1.Workbooks[1]);
        excelworksheet1.ConnectTo(excelWorkbook1.Worksheets[1] as _worksheet);
    end;
    根据你自己的需要改动一下
    这段代码是可用的
    我使用过
      

  3.   

    给个例子
    读取Excel 97 或2000工作表    
        
    procedure TstartForm.SpeedButton10Click(Sender: TObject);var MSExcel:Variant;beginMSExcel:=CreateOLEObject('Excel.Application');MSExcel.WorkBooks.Add;MSExcel.Visible:=True;  for i:=5 to Query1.RecordCount+4 dobeginMsExcel.Cells[i,1].value:=Query1.FieldByName('cpxhno').Asstring;MsExcel.Cells[i,2].value:=Query1.FieldByName('cpname').Asstring;MsExcel.Cells[i,3].value:=Query1.FieldByName('cpunit').Asstring;MsExcel.Cells[i,4].value:=Query1.FieldByName('htnumber').Asstring;MsExcel.Cells[i,5].value:=Query1.FieldByName('number').Asstring;MsExcel.Cells[i,6].value:=Query1.FieldByName('ljno').Asstring;end;end;退出Excel:MSExcel.Quit;MSExcel:=Unassigned; //释放VARIANT变***************先加入ExcelApplication1;ExcelWorkbook1;ExcelWorksheet1;procedure TForm1.n1Click(Sender: TObject);varrow,brea:integer;a,b,c,d,e:shortstring;beginif table1.active = True then begintryExcelApplication1.Connect;ExceptExcelApplication1.free;Abort;end;brea := strtoint(inputbox('输入需导入行数!','行数','10'));if brea<1 then brea := 10;ProgressBar1.Visible := True;ProgressBar1.Max := brea;ExcelApplication1.Visible[0] := true;for row := 2 to brea dobegina := ExcelWorksheet1.Cells.Item[row,2];b := ExcelWorksheet1.Cells.Item[row,1];c := ExcelWorksheet1.Cells.Item[row,3];d := ExcelWorksheet1.Cells.Item[row,4];e := ExcelWorksheet1.Cells.Item[row,5];form1.show;table1.AppendRecord([a,b,c,d,e]);ProgressBar1.Position := row-1;end;ProgressBar1.Hide;end;end;*****************varMSExcel: Variant;i: Integer;beginOpenDialog1.Filter:='*.XLS|*.XLS';OpenDialog1.DefaultExt:='XLS';if OpenDialog1.Execute thenbeginMSExcel:=CreateOLEObject('Excel.Application');MSExcel.WorkBooks.Open(OpenDialog1.FileName);MSExcel.Visible:=False;//从有数据的行逐行读入数据for i:=1 to MSExcel.ActiveSheet.UsedRange.Rows.Count dobeginEdit2.Text:=Edit2.Text+MSExcel.Cells[i,1].Value;end;MSExcel.ActiveWorkBook.Close;MSExcel.Quit;end;end;