用excel做报表 我之前做了一个通用的excel报表导出模块,也是事先用excel模版制作报表格式。不过导出用的是NativeExcel,可快速导出数据。Ole太慢了。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 nativeexcel本身就是用文件流的方式处理。如果你自己处理,需要分析excel文件格式——这可是一个巨大的工作量。有现成的为啥不用?! 是这个问题太难,还是delphi没人气了,怎么除了版主就没人理?唉!!!自己用流摸索了几天,还是没有搞定:一是怎么用流从xls中复制出一个sheet出来?用copy或save的方法都是复制出整个book.二是怎么把复制出来的表格在一张表中循环追加?三是怎么在没有列表头的情况下添加数据?四是能不能在缓存中把数据添加好后,一起追加到表后面? 建议使用第三方控件,建议EXCEL报表,速度快。比如:XLSReadWriteII XLSReadWriteII我试过,有二个问题,一个是要收费的,另一个是做中国式报表好像也有困难 其实我不是一个软件工程师,只不过对delphi有一点爱好,没事的时候学一下。我一位很好的老同学是搞软件的,我看他的一个软件在打印时是用excel,我知道他用的是ole,特别慢,所以想试一下能不能改用其它方式。用ado进行数据导入导出excel,比较简单,就是这个打印中国式报表没法解决。 请各位大神看看错在哪?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;按我的理解,应该在打印表中有二个模板表格,通过跟踪指针位置,好像也是在二个表大小的尾部,看文件大小也是原来的二倍。但打开文件看,还是只有一个表,关闭后再看文件大小,又只有一个表的大小了。百思不得其解,恳请各位指点! 急招delphi程序员(成都) 自定义了一个类,但是不会初始化,运行时错误Control '' has no parent window,郁闷,谁来教教我! 如何扑获在记录之间移动的事件 关于线程同步问题的请教 请问怎样实现在DBgrid表中显示指定格式的数据? 在调用OnClose事件时,可不可以选择是否关闭? delphi5中如何设计数据模块呀,我怎么找不到呢? 如何从内存映像表中取数据。 query 数据修改后不能保存 建立MIDAS服务器必须是在NT上吗!win98,win2000 可以吗? 串口接收到的数据如何校验 关于多个txt文件查询问题
自己用流摸索了几天,还是没有搞定:
一是怎么用流从xls中复制出一个sheet出来?用copy或save的方法都是复制出整个book.
二是怎么把复制出来的表格在一张表中循环追加?
三是怎么在没有列表头的情况下添加数据?
四是能不能在缓存中把数据添加好后,一起追加到表后面?
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;
按我的理解,应该在打印表中有二个模板表格,通过跟踪指针位置,好像也是在二个表大小的尾部,看文件大小也是原来的二倍。但打开文件看,还是只有一个表,关闭后再看文件大小,又只有一个表的大小了。百思不得其解,恳请各位指点!