我之前做了一个通用的excel报表导出模块,也是事先用excel模版制作报表格式。不过导出用的是NativeExcel,可快速导出数据。Ole太慢了。

解决方案 »

  1.   

    nativeexcel本身就是用文件流的方式处理。如果你自己处理,需要分析excel文件格式——这可是一个巨大的工作量。有现成的为啥不用?!
      

  2.   

    是这个问题太难,还是delphi没人气了,怎么除了版主就没人理?唉!!!
    自己用流摸索了几天,还是没有搞定:
    一是怎么用流从xls中复制出一个sheet出来?用copy或save的方法都是复制出整个book.
    二是怎么把复制出来的表格在一张表中循环追加?
    三是怎么在没有列表头的情况下添加数据?
    四是能不能在缓存中把数据添加好后,一起追加到表后面?
      

  3.   

    建议使用第三方控件,建议EXCEL报表,速度快。比如:XLSReadWriteII
      

  4.   

    XLSReadWriteII我试过,有二个问题,一个是要收费的,另一个是做中国式报表好像也有困难
      

  5.   

    其实我不是一个软件工程师,只不过对delphi有一点爱好,没事的时候学一下。我一位很好的老同学是搞软件的,我看他的一个软件在打印时是用excel,我知道他用的是ole,特别慢,所以想试一下能不能改用其它方式。用ado进行数据导入导出excel,比较简单,就是这个打印中国式报表没法解决。
      

  6.   

    请各位大神看看错在哪?
    procedure prmexcel;
    var mstr:  TMemoryStream;
        fstr:TFileStream;
        modpath,savepath:string;   
    begin      
        modpath := ExtractFilePath(application.ExeName)+'1.xls'; //模板文件
        savepath :=ExtractFilePath(application.ExeName)+'打印表.xls'; //建立新文件
        fStr := TFileStream.Create(savePath, fmCreate);  
        mstr := TMemoryStream.Create ;
        mstr.LoadFromFile(modpath); //导入模板文件到内存流
        fStr.CopyFrom(mstr, 0); // 复制mstr流的全部到文件中
        fstr.Seek(0,soFromEnd);   //指针移到流的尾部
        fstr.CopyFrom(mstr,0); //把内存流再次追加到原文件尾部
        // showmessage(inttostr(fstr.Position)) ;//在这显示文件流指针的位置好像是改变了,但打开文件看还是只有一个表
        mstr.Free;
        fStr.Free;
    end;
    按我的理解,应该在打印表中有二个模板表格,通过跟踪指针位置,好像也是在二个表大小的尾部,看文件大小也是原来的二倍。但打开文件看,还是只有一个表,关闭后再看文件大小,又只有一个表的大小了。百思不得其解,恳请各位指点!