急求:cxGrid导出Excel时,如何导出多个Sheet??请大虾们指教,感激!

BigAngell 2009-12-02 11:45:06
急求:cxGrid导出Excel时,如何导出多个Sheet??请大虾们指教,感激!

比如说cxGrid有多个View或多个Level,如何处理?

没分了,最后50分,多谢!!!
...全文
533 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
BigAngell 2009-12-17
  • 打赏
  • 举报
回复
问题已经解决,我是先用cxExport逐个导出,再用Excel将导出的多个文件合并
shuaialang 2009-12-03
  • 打赏
  • 举报
回复
导入导出我基本都是自己定义的。

dbgrideh可以自定义导出,但是导入就不行了,到头来还是要自己来处理

楼主稍微看下delphi操作excel的例子,就可以融会贯通了。
金卯刀 2009-12-03
  • 打赏
  • 举报
回复
xlsReadandwriteII----好像是這個名字,利用它 ,可以在沒有裝office的狀況下導出。
BigAngell 2009-12-03
  • 打赏
  • 举报
回复
能不能在没有安装Office环境的条件下导出?

cxExport就可以在没有Office环境下导出,我看了一下cxExport的部分代码,没那么时间细看,本人水平也不有限。

有兴趣的朋友可以研究一下嘛,分析一下也许可以将它功能扩展。
lyhoo163 2009-12-02
  • 打赏
  • 举报
回复
下面代码在一个workbook上建立三个sheet页。请参考,自己解决建立多个sheet页的代码:

MainFrm.ExcelApplication1.Caption:='导出Excel数据'; // Excel任务栏标题
MainFrm.ExcelApplication1.Workbooks.Add(null,0); // 加入一个workbook
MainFrm.ExcelWorkbook1.ConnectTo(MainFrm.ExcelApplication1.Workbooks[1]);// 连接Workbook
MainFrm.ExcelWorksheet1.ConnectTo(MainFrm.ExcelWorkbook1.Worksheets[3] as _Worksheet);
MainFrm.ExcelWorksheet1.Name:='第3页'; // 修改sheet名称
MainFrm.ExcelWorksheet1.ConnectTo(MainFrm.ExcelWorkbook1.Worksheets[2] as _Worksheet);
MainFrm.ExcelWorksheet1.Name:='第2页'; // 修改sheet名称
MainFrm.ExcelWorksheet1.ConnectTo(MainFrm.ExcelWorkbook1.Worksheets[1] as _Worksheet);
MainFrm.ExcelWorksheet1.Name:='第1页'; // 修改sheet名称
c58342418 2009-12-02
  • 打赏
  • 举报
回复
我前段时间也出现这样的问题,,自己写了个可以这样的功能,但是 delphi 写excel速度太慢了,,我要写几百万条..实在忍受不了,最后改成导出文本.速度相差上百倍.如果你的数据量大的话,也可以Test.把每60000条数据放到一个txt文件里
Procedure TFrmPubDbToExcel.DbToExcel(aHandle:TComponent;dbset:TDataSet);
var
Excel,WrkBook,WrkSheet:oleVariant;
SaveDialog1:TSaveDialog;
tmp,Row,SheetCount:integer;
begin
try
Excel:=CreateOleObject('Excel.Application');
Except
if Application.MessageBox('对不起,你的机器没有安装Microsoft Excel,是否继续导出?'
+ #13#13 + '导出后在您的机器上不能直接打开,必须安装Excel到机器上才能打开!',
'注意', MB_OKCANCEL) = ID_no then
exit;
end;
SaveDialog1:=TSaveDialog.Create(aHandle);
SaveDialog1.Filter:='*.xls|(*.xls Excel文件)';
try
if SaveDialog1.Execute then
begin
WrkBook:=Excel.WorkBooks.Add;
Row:=1;
SheetCount:=1;

dbSet.DisableControls;
dbSet.First;
ProBar.Max := dbSet.RecordCount;
ProBar.Position:=0;
while not dbSet.Eof do
begin
if Row=1 then
for tmp:=0 to dbSet.FieldCount-1 do
if dbSet.Fields.Fields[tmp].Visible then
Excel.WorkSheets[SheetCount].Cells[Row,tmp+1].Value:=dbSet.Fields.Fields[tmp].DisplayLabel;
inc(Row);

for tmp:= 0 to dbSet.FieldCount-1 do
begin
if dbSet.Fields[tmp].Visible then
Excel.WorkSheets[SheetCount].Cells[Row,Tmp+1].value:= '''' + dbSet.Fields[tmp].AsString;
end;

if Row>=50000 then
begin
SheetCount:=SheetCount+1;
Row:=0;

if SheetCount>3 then
begin
WrkSheet:=WrkBook.WorkSheets[WrkBook.WorkSheets.Count];
wrkBook.WorkSheets.Add(EmptyParam,WrkSheet,1,$FFFFEFB9);
end;
end;
ProBar.Position:=ProBar.Position+1;
dbSet.Next;
end;

Excel.ActiveWorkBook.SaveAs(SaveDialog1.FileName);
WrkBook.close;
Excel.Quit;
Excel:=unassigned;
Messagebox(self.Handle,Pchar('系统已经导出,请到《'+SaveDialog1.FileName+'》里查看!!!')
,'提示信息',MB_OK+MB_ICONINFORMATION);
end;
finally
SaveDialog1.Free;
dbSet.EnableControls;
end;
end;
BigAngell 2009-12-02
  • 打赏
  • 举报
回复
现成的控件哪儿下?
金卯刀 2009-12-02
  • 打赏
  • 举报
回复
cxgrid沒有此現成的功能,自己導出...
随行的太阳 2009-12-02
  • 打赏
  • 举报
回复
有专门的导出控件的,找个直接就可以用!!!

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧