同上
最好导入得数据通过EXCEL表得计算公式能自动计算。。

解决方案 »

  1.   

    Unit excel;InterfaceUsesWindows,Messages,SysUtils,Classes,Graphics,Controls,Forms,Dialogs,StdCtrls,ComObj,{ ComObj是操作OLE对象的函数集}TypeTForm1=class(TForm)Button1:TButton;Procedure Button1Click(Sender:Tobject);Private{ Private declaration}Public{ Public declaration }end; varForm1:Tform1;Implementation{$R *.DFM}procedure TForm1.Button1Click(sender:Tobject);vareclApp,WordBook:Variant; {声明为OLE Automation对象}xlsFileName:string;beginxlsFileName:=’ex.xls’;try{创建OLE对象:Excel Application与WordBook}eclApp:=CreateOleObject(‘Excel.Application’);WorkBook:=CreateOleObject(Excel.Sheet’);ExceptApplication.MessageBox(‘你的机器没有安装Microsoft Excel’,’使用Microsoft Excel’,MB_OK+MB_ICONWarning);Exit;End;TryShowMessage(‘下面演示:新建一个XLS文件,并写入数据,并关闭它。’);WorkBook:=eclApp.workbooks.Add;EclApp.Cells(1,1):=’字符型’;EclApp.Cells(2,1):=’Excel文件’;EclApp.Cells(1,2):=’Money’;EclApp.Cells(2,2):=10.01;EclApp.Cells(1,3):=’日期型’;EclApp.Cells(2,3):=Date;WorkBook.SaveAS(xlsFileName);WorkBook.close;ShowMessage(‘下面演示:打开刚创建的XLS文件,并修改其中的内容,然后,由用户决定是否保存。’);Workbook:=eclApp.WorkBooks.Open(xlsFileName);EclApp.Cells(1,4):=’Excel文件类型’;If MessageDlg(xlsFileName+’已经被修改,是否保存?’,mtConfirmation,[mbYes,mbNo],0)=mrYes thenWorkBook.SaveElseWorkBook.Saved:=True; {放弃保存}Workbook.Close;EclApp.Quit; //退出Excel Application{释放Variant变量}eclApp:=Unassigned;exceptShowMessage(‘不能正确操作Excel文件。可能是该文件已被其他程序打开,或系统错误。’);WorkBook.close;EclApp.Quit;{释放Variant变量}eclApp:=Unassigned;end;end;end. 
      

  2.   

    1. 引言
    1.1 编写目的
               为了把数据库中的数据导入到Excel,方便、迅速的打印。
    1.2 项目背景
                使用Excel对数据和报表强大的处理功能。参考了Ereport中国式的报表控件的结构和处理方法。
    1.3 定义
                        Excel对数据和报表的处理功能强大,为了方便灵活的把数据从其它数据库中导入到Excel,利用Excel本身的功能打印报表而写的控件。令报表设计轻松快捷。实现所见即所得,即打即排。实现报表与软件分开,让用户可以自己设计自己的报表方案。
    2. 总体设计
    1.  1   需求概述
    1.使用简便、易于理解和操作。
    2.提供较好的灵活性满足数据导入到Execl的需求。
    1.  2   控件结构
    1.对变量的处理。
    2.对数据集的处理。
                    3.扫描Execl模板生成.xsl格式的数据文件报表。
    3. 程序功能设计.
    控件名称 ReportExcle
    控件版本 1.0.0.0
    属性部分
    属性名称 类型 描述
    Name String 控件名称
    ReportFile TList 选择报表模板名称
    Tag Int 控件标志
    方法部分
    方法名称 参数 描述
    SetDataSet strDatasetName: string;pDataSet: TDataSet 指定报表模板中的数据集变量名
    SetVarValue strVarName: string strVarValue: string 设置报表模板中的字符变量内容
    PrintPreview bPreviewMode: Boolean 是否执行4. Excel编辑报表模板。模板编辑约定。
    1。`+变量名称。例如:`date,自定的变量。
    2。#+数据集名称+.+数据表字段名称。例如:#UserQry.username。
    l `号开头的是变量,通过SetVarValue来赋值。
    l #号开头的是主表的表名及字段名,通过SetDataSet来赋值。
    l `date,`time,`datetime为控件变量,分别表示打印的日期和时间。
    5. 输入的接口
    1. 设置要使用报表模板的文件名,调用控件的ReportFile属性。
    2. 设置报表模板中的数据集变量名,调用控件的SetDataSet方法。
    2。设置报表模板中的字符变量内容,调用控件的SetVarValue方法。
    6. 输出的接口
    1. 打印预览。控件PrintPreview方法,检查系统有没有安装MicroSoft EXCEL软件,没有安装就退出,安装了就调用ReportFile属性里设置的对应Excel模板,开始对每一单元格扫描生存报表,是`开头的写入报表对应SetVarValue来赋值的变量的值,是#开头的分解得到数据集名和字段名从对应的数据库中取出数据写入报表,不是二者的直接写入报表,行数根据数据集的记录数目来确定。生成。Xsl文件的数据文件后,是否保存,是否打印,等用户自行对Excel进行操作。
    7. 控件内部结构。
    1. 用TvarTableItem结构体保存所有变量的名字和值的对照表。
    2. 用TDatasetItem结构体保存所有数据集的指针和名称的对照
    3. 扫描报表模板单元格是根据变量的名或者数据集变量从结构体取出向应的值和名称,根据数据记录数目生成相同行数的Excel报表。
      

  3.   

    用CXGRID
    我给你发东西过来,再给你发个任何查询的打印模板
      

  4.   

    to chenquan(嘉威王子) 也给我发发,[email protected],我想看看对比我做的控件还有那些毛病
      

  5.   

    to chenquan(嘉威王子) 也给我发发 ,谢谢
      

  6.   

    to chenquan(嘉威王子) 为什么不给我发,你是骗人的吗
      

  7.   

    导出为excel表:
    procedure TForm3.Excel4Click(Sender: TObject);   //将联合查询的结构转为excel表
    var       xlsFilename :string;
              eclApp,WorkBook :variant ;
              a_filedNo,i,j :integer;
    begin
              a_filedNo :=Form3.DBGrid4.FieldCount  ;
              xlsFileName :='关于学生成绩基本信息.xls';          try
                      eclApp :=CreateOleObject('Excel.Application');
                      WorkBook :=CreateOleObject('Excel.Sheet');
              except
                      showmessage('您的系统没有安装MS EXCEL');
                      exit;
              end;          try
                        WorkBook :=eclApp.workBooks.add ;
                        for i :=1 to  a_FiledNo do      //转化字段名;
                         begin
                                //eclApp.cells(1,i) :=Form3.DBGrid4.Columns[i-1].Title.caption ;
                                eclApp.cells(1,i) :=Form3.DBGrid4.Fields[i-1].FieldName ;
                         end;                    Form3.DBGrid4.DataSource.DataSet.First ;
                        for i :=1 to  Form3.a_recno   do    //Form3.a_recno                       begin
                                for j :=1 to  a_filedNo do  //转化一个记录
                                  begin
                                          eclApp.cells(i+1,j) :=Form3.DbGrid4.Fields[j-1].Value ;
                                  end;
                                Form3.DBGrid4.DataSource.DataSet.Next ;
                          end;
                    try
                         WorkBook.saveas(ExtractFilePath(Application.ExeName )+xlsFileName);
                         WorkBook.close;
                         showmessage('保存EXECL文件成功,路径为:'+ExtractFilePath(Application.ExeName )+xlsFileName);
                      except
                               showmessage('保存文件出错');
                      end;
                   except
                     showmessage('不能正确操作EXECL文件,可能该文件已经被其他程序占用或系统错误');
                     WorkBook.close;
                     eclApp.quit;
                     eclApp :=Unassigned;
             end;
    end;
      

  8.   

    //将任何数据集中的数据导入到EXCEL中,函数执行后打开EXCEL并开始导入数据,可在EXCEL中自己保存文件,也可以在函数中修改直接保存为EXCEL文件而无须打开EXCEL。..
    uses comobj,db;
    ..
    function dte(const data:TDataSet):OLEVARIANT;
     var
    eclapp,workbook:OLEVARIANT;
    i,column,row:integer;
    begin    //将数据集中的数据导入到EXCEL中
      screen.cursor:=crhourglass;
         if  data.RecordCount<>0  then begin
    try
    begin
       eclapp:=createoleobject('excel.application');
       eclapp.visible:=true;
       workbook:=createoleobject('excel.sheet');
       end
       except
       showmessage('你的EXCEL还未正确安装!!!');
          screen.cursor:=crdefault;
       exit;
       end;
         workbook:=eclapp.workbooks.add;
       row:=2;
       eclapp.workbooks.item[1].activate;
       eclapp.cells.font.colorindex:=5;
              for i:=1 to data.FieldCount do
            eclapp.cells(row,i):=data.fields[i-1].DisplayLabel;
            data.first;
       while not data.Eof do
       begin
        column:=1;
        for i:=1 to data.FieldCount  do
        begin
        eclapp.cells.item[row+1,column]:=data.fields[i-1].asstring;
            column:=column+1;
        end;
           data.next;
           row:=row+1;
       end;     screen.cursor:=crdefault;
               end;           end;