谢谢!

解决方案 »

  1.   

    我用的是bde,是一条一条的读入数据库,也出现了你说的这种错误。我现在正在
    改用ado来解决,即把excel但数据库来处理,应该没有什么问题。解决了后我给你发消息。
      

  2.   

    //创建一个ExcelApplication控件
      ExcelApplication1 := CreateOleObject( 'Excel.Application' );
      

  3.   

    unit U_Report;interface
    uses  Windows, SysUtils, Messages, Dialogs, Classes, Forms, OleCtnrs, OleServer, Excel97, ComObj;Const    ReNo=23;     //一页显示的记录数
    Const    MAX=35;     //最大的数组个数Var
      ExlApp:OleVariant;
      ExlBook:OleVariant;  function GetRepRange(x,y:integer):String;          //将(x,y)坐标形式改为Excel区域(A1:B1)形式
      procedure CellMerge(x1,y1,x2,y2:integer);                                   //合并指定单元格
      procedure SetRepLine(x,y:Integer);                                                //加边框线
      procedure CellWrite(RepData: String; x,y:Integer);                            //单元格写数据
      procedure CellFormat(x1,y1,x2,y2:integer);                                  //指定单元格格式
      procedure CellGS(x1,y1,x2,y2,f:integer);                                  //灵活单元格格式  procedure RepCreat;                               //创建OLE对象(Excel Application与WorkBook)
      procedure CreatRepSheet(SheetName:String;PageSize,PageLay:Integer);   //新建工作簿、页面设置
      procedure SetAddMess(H_Mess1,H_Mess2,H_Mess3,F_Mess1,F_Mess2,F_Mess3:String); //设置附加信息
      procedure SetRepBody(x,ch:Integer;cw:Double;cf:String);               //设置整体各列数据格式
      procedure CreatTitle(TitleName:String;y:Integer);                                 //设置标题
      procedure CreatSubHead(SubTitle: Array of String);                          //设置常规子表头
      procedure SubHeadFormat(y,r:Integer);                                       //设置子表头格式
      procedure DTSubHeadGS(x,y,r:Integer);                                   //设置动态子表头格式
      procedure WriteData(RepData: String; x,y,flag:Integer);                           //写入数据
      procedure RepPageBreak(x,y,r:Integer);                                      //分页、复制表头
      procedure RepSaveAs(FileName:String);                                      //保存为*.xls文件
      procedure RepPrivew(FileName:String);                                                 //预览
      procedure RepQuit;                                                               //退出Excel
      procedure RepDestroy;                                                      //非正常退出Excelimplementationfunction GetRepRange(x,y:integer):string;
    var fX,fY:string;
    begin
      if y<=0 then
        fX:='A';
      if y<=26 then
        fX := chr(64+y);
      if y>26 then
        fX:=chr(64+(y div 26))+chr(64+(y mod 26));  fY:=IntToStr(x);
      Result:=fX+fY;
    end;procedure CellMerge(x1,y1,x2,y2:integer);
    {合并指定单元格}
    Var
      RepSpace:String;
    begin
      RepSpace:=GetRepRange(x1,y1)+':'+GetRepRange(x2,y2);
      ExlApp.Range[RepSpace].Select;
      ExlApp.Selection.Merge;
    end;{CellMerge}procedure CellFormat(x1,y1,x2,y2:integer);
    {指定单元格格式}
    Var
      RepSpace:String;
    begin
      RepSpace:=GetRepRange(x1,y1)+':'+GetRepRange(x2,y2);
      ExlApp.Range[RepSpace].Select;
      ExlApp.Selection.NumberFormat :='G/通用格式';
      ExlApp.Selection.Font.Bold:=True;
      ExlApp.Selection.HorizontalAlignment:=3;      //水平方向对齐方式:居中end;{CellFormat}procedure CellGS(x1,y1,x2,y2,f:integer);
    {灵活单元格格式}
    Var
      RepSpace:String;
    begin
      RepSpace:=GetRepRange(x1,y1)+':'+GetRepRange(x2,y2);
      ExlApp.Range[RepSpace].Select;
      ExlApp.Selection.NumberFormat :='G/通用格式';
      ExlApp.Selection.HorizontalAlignment:=f;      //水平方向对齐方式:居中
    end;{CellGS}procedure SetRepLine(x,y:Integer);
    {加边框线}
    Var
      RepSpace:String;
    begin
      RepSpace:=GetRepRange(x,1)+':'+GetRepRange(x,y);
      ExlApp.ActiveSheet.Range[RepSpace].Borders.LineStyle:=xlContinuous;
    end;{SetRepLine}procedure CellWrite(RepData: String; x,y:Integer);
    {单元格写数据}
    begin
      ExlApp.cells(x,y):=RepData;
    end;{CellWrite}procedure RepCreat;
    {创建Excel对象}
    begin
      try
        ExlApp:=CreateOLEObject('Excel.Application');
        ExlBook:=CreateOLEObject('Excel.Sheet');
        ExlApp.Visible :=False;// True;
        ExlApp.DisplayAlerts := False;
      except
        MessageDlg('您的机器里未安装Microsoft Excel!', mtError, [mbOk], 0);
        Exit;
      end;{try}
    end;{RepCreat}
    procedure CreatRepSheet(SheetName:String;PageSize,PageLay:Integer);
    {新建Excel工作簿、进行页面设置}
    begin
      {新建Excel工作簿}
      if ExlApp.WorkBooks.Count<1 then
      begin
        ExlBook:=ExlApp.Workbooks.Add;      //ExlBook:=ExlApp.WorkBooks[1].WorkSheets[1];
        ExlApp.ActiveSheet.Name:=SheetName;
      end;{if}
      

  4.   

    //设置页面
      if PageSize=1 then
        ExlApp.ActiveSheet.PageSetup.PaperSize:=xlPaperA3;      //纸张大小 :A3
      if PageSize=2 then
        ExlApp.ActiveSheet.PageSetup.PaperSize:=xlPaperA4;      //纸张大小 :A4
      if PageSize=3 then
        ExlApp.ActiveSheet.PageSetup.PaperSize:=xlPaperB5;      //纸张大小 :B5
      if PageLay=1 then
        ExlApp.ActiveSheet.PageSetup.Orientation:=xlportrait;   //页面放置方向:纵向
      if PageLay=2 then
        ExlApp.ActiveSheet.PageSetup.Orientation:=xlLandscape;  //页面放置方向:横向  //设置页宽自动适应
      ExlApp.ActiveSheet.PageSetup.Zoom := False;
      ExlApp.ActiveSheet.PageSetup.FitToPagesWide := 1;
      ExlApp.ActiveSheet.PageSetup.FitToPagesTall := False;  //设置页眉、页脚(即:页标题、页号)
      ExlApp.ActiveSheet.PageSetup.RightFooter:='打印时间: '+'&D &T';
      ExlApp.ActiveSheet.PageSetup.CenterFooter:='第&''&P&''页,共&''&N&''页';  //设置页边距:
      ExlApp.ActiveSheet.PageSetup.TopMargin:=1.5/0.035;
      ExlApp.ActiveSheet.PageSetup.BottomMargin:=1.5/0.035;
      ExlApp.ActiveSheet.PageSetup.LeftMargin:=1/0.035;
      ExlApp.ActiveSheet.PageSetup.RightMargin:=1/0.035;
      ExlApp.ActiveSheet.PageSetup.HeaderMargin:=0.5/0.035;
      ExlApp.ActiveSheet.PageSetup.FooterMargin:=0.5/0.035;  //设置页面对齐方式
      ExlApp.ActiveSheet.PageSetup.CenterHorizontally:=True;     //页面水平居中
    //  ExlApp.ActiveSheet.PageSetup.CenterVertically :=True;      //页面垂直居中  //设置整体字体格式
      ExlApp.Cells.Font.Name:='宋体';                   //字体
      ExlApp.Cells.Font.Size:=12;                       //字号
      ExlApp.Cells.RowHeight:=16;                     //行高
      ExlApp.Cells.VerticalAlignment:=2;               //垂直方向对齐方式:居中
    end;{CreatRepSheet}procedure SetAddMess(H_Mess1,H_Mess2,H_Mess3,F_Mess1,F_Mess2,F_Mess3:String);
    //用户自定义页眉、页脚(即:页标题、页号)
    begin
      ExlApp.ActiveSheet.PageSetup.LeftHeader:=H_Mess1;
      ExlApp.ActiveSheet.PageSetup.CenterHeader:=H_Mess2;
      ExlApp.ActiveSheet.PageSetup.RightHeader:=H_Mess3;
    end;{SetAddMess}procedure SetRepBody(x,ch:Integer;cw:Double;cf:String);
    //设置整体各列数据格式
    begin
      ExlApp.ActiveSheet.Columns[x].ColumnWidth:=cw;           //列宽
      ExlApp.ActiveSheet.Columns[x].NumberFormat:=Cf;          //单元格数据格式
      ExlApp.ActiveSheet.Columns[x].HorizontalAlignment:=ch;   //水平方向对齐方式
    end;{SetRepBody}procedure CreatTitle(TitleName:String;y:Integer);
    {设置标题}
    Var
      RepSpace:String;
    begin
      CellMerge(1,1,1,y);
      ExlApp.cells(1,1):=TitleName;
      RepSpace:='A1'+':'+GetRepRange(1,y);
      ExlApp.Range[RepSpace].Select;
      ExlApp.Selection.NumberFormat :='G/通用格式';
      ExlApp.Selection.Font.Size:=22;
      ExlApp.Selection.Font.Name:='黑体';
      ExlApp.Selection.Font.Bold:=True;
      ExlApp.Selection.HorizontalAlignment:=3;      //水平方向对齐方式:居中
      ExlApp.Rows[1].RowHeight:=28;
    end;{RepHead}procedure CreatSubHead(SubTitle: Array of String);
    {设置常规子表头}
    Var
      i,j:Integer;
    begin
      j:=0;
      for  i:=Low(SubTitle) to High(SubTitle) do
      begin
        Inc(j);
        ExlApp.cells(2,j):=SubTitle[i];
      end;
    end;{CreatRepHead}procedure SubHeadFormat(y,r:Integer);
    {设置子表头格式}
    Var
      RepSpace:String;
      n:Integer;
    begin
      RepSpace:='A2'+':'+GetRepRange(1+r,y);
      ExlApp.Range[RepSpace].Select;
      ExlApp.Selection.NumberFormat :='G/通用格式';
      ExlApp.Selection.HorizontalAlignment:=3;        //表头水平对齐方式:居中
      ExlApp.Selection.Font.Bold:=True;
      for n:=1 to r do
      begin
        ExlApp.Rows[1+n].RowHeight:=18;
        SetRepLine(1+n,y);
      end;{for}
    end;{SubHeadFormat}procedure DTSubHeadGS(x,y,r:Integer);
    {设置动态子表头格式}
    Var
      RepSpace:String;
      n:Integer;
    begin
      RepSpace:=GetRepRange(x,1)+':'+GetRepRange(x+r-1,y);
      ExlApp.Range[RepSpace].Select;
      ExlApp.Selection.NumberFormat :='G/通用格式';
      ExlApp.Selection.HorizontalAlignment:=3;        //表头水平对齐方式:居中
      ExlApp.Selection.Font.Bold:=True;
      for n:=0 to r-1 do
      begin
        ExlApp.Rows[x+n].RowHeight:=18;
        SetRepLine(x+n,y);
      end;{for}
    end;{DTSubHeadGS}procedure WriteData(RepData: String; x,y,flag:Integer); //写入数据
    {写数据}
    begin
      if flag=1 then
        ExlApp.cells(x,y):=StrToDate(RepData)
      else
        ExlApp.cells(x,y):=RepData;
    end;{WriteDate}procedure RepPageBreak(x,y,r:Integer);   //X:分页处行数,Y:列数,R:子表头总共的行数
    //分页、复制表头
    Var
      RepSpace:String;
      n:Integer;
    begin
      ExlApp.ActiveSheet.Rows[x].PageBreak := 1;
      RepSpace:='A1'+':'+GetRepRange(r+1,y);
      ExlApp.ActiveSheet.Range[RepSpace].Copy;
      RepSpace:='A'+IntToStr(x);
      ExlApp.ActiveSheet.Range[RepSpace].PasteSpecial;
      ExlApp.Rows[x].RowHeight:=28;
      for n:=2 to r do
        ExlApp.Rows[x+n].RowHeight:=18;
    end;{RepPageBreak}procedure RepSaveAs(FileName:String);
    {保存为*.xls文件}
    begin
      try
        ExlBook.saveas(FileName);
      except
        MessageDlg('不能访问文件,请关闭Microsoft Excel后再运行本程序!', mtError, [mbOk], 0);
      end;
    end;{RepSaveAs}procedure RepPrivew(FileName:String);
    {预览}
    begin
      RepCreat;
      ExlApp.Visible :=True;
      try
        ExlApp.workBooks.Open(FileName);
        ExlApp.Workbooks[1].WorkSheets[1].PrintPreview;
      finally
        ExlApp.Quit;
        ExlApp:=Unassigned;
        //ExlApp:='';
      end;{try}
    end;{RepPrivew}procedure RepQuit;
    {退出Excel}
    begin
     ExlBook.Close;
     ExlApp.Quit;       //退出Excel Application
     ExlApp:=Unassigned;  //释放VARIANT变量
    end;{RepQuit}procedure RepDestroy;
    {非正常退出Excel}
    begin
      if Not VarIsEmpty(ExlApp) then
        RepQuit;
    end;{RepDestroy}end.
      

  5.   

    delphi报错如下:
    raised exeception class Eoleerror 'ole message 800A01A8'