如何将几个DBGRID里的内容导入同一个EXCEL表中....的问题
来源:互联网 发布:网商银行网络无法连接 编辑:程序博客网 时间:2024/05/17 22:58
http://dev.csdn.net/article/53/53442.shtm
如何将几个DBGRID里的内容导入同一个EXCEL表中?
在软件实际制作中,为节省开发成本和开发周期,一些软件人员通常会吧DBGrid中的数据直接导出到Excel表中,而先前能看到的函数仅仅只能在WorkBook的一个Sheet中导入数据,不支持多Sheet!。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
单元应用:
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, DBTables, Grids, DBGrids, ActiveX, ComObj,
Excel2000, OleServer;
procedure CopyDbDataToExcel(Args: array of const);
var
iCount, jCount: Integer;
XLApp: Variant;
Sheet: Variant;
I: Integer;
begin
Screen.Cursor := crHourGlass;
if not VarIsEmpty(XLApp) then
begin
XLApp.DisplayAlerts := False;
XLApp.Quit;
VarClear(XLApp);
end;
try
XLApp := CreateOleObject(‘Excel.Application‘);
except
Screen.Cursor := crDefault;
Exit;
end;
XLApp.WorkBooks.Add;// (1)
XLApp.SheetsInNewWorkbook := High(Args) + 1;// (2)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
XLApp.SheetsInNewWorkbook := High(Args) + 1;
XLApp.WorkBooks.Add;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
for I := Low(Args) to High(Args) do
begin
XLApp.WorkBooks[1].WorkSheets[I+1].Name := TDBGrid(Args[I].VObject).Name;
Sheet := XLApp.Workbooks[1].WorkSheets[TDBGrid(Args[I].VObject).Name];
if not TDBGrid(Args[I].VObject).DataSource.DataSet.Active then
begin
Screen.Cursor := crDefault;
Exit;
end;
TDBGrid(Args[I].VObject).DataSource.DataSet.first;
for iCount := 0 to TDBGrid(Args[I].VObject).Columns.Count - 1 do
Sheet.Cells[1, iCount + 1] := TDBGrid(Args[I].VObject).Columns.Items[iCount].Title.Caption;
jCount := 1;
while not TDBGrid(Args[I].VObject).DataSource.DataSet.Eof do
begin
for iCount := 0 to TDBGrid(Args[I].VObject).Columns.Count - 1 do
Sheet.Cells[jCount + 1, iCount + 1] := TDBGrid(Args[I].VObject).Columns.Items[iCount].Field.AsString;
Inc(jCount);
TDBGrid(Args[I].VObject).DataSource.DataSet.Next;
end;
end;
XlApp.Visible := True;
Screen.Cursor := crDefault;
end;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
经过测试,上面这段代码确实有问题:(有兴趣的朋友可以自己测试一下)
比如:
先form1.CopyDbDataToExcel([dbgrid1,dbgrid2,dbgrid3]);//OK
再form1.CopyDbDataToExcel([dbgrid1,dbgrid2,dbgrid,dbgrid4]);//这样就出错,提示:无效索引
如果这样:
先form1.CopyDbDataToExcel([dbgrid1,dbgrid2,dbgrid3,dbgrid4]);//OK
再form1.CopyDbDataToExcel([dbgrid1,dbgrid2]);//OK
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
总之:先少后多,就出错...
原因就出在上面代码(1),(2)两段上,经过测试,正确的应该将(1),(2)代码对调,才能保证不出错....
- 如何将几个DBGRID里的内容导入同一个EXCEL表中....的问题
- 如何将几个DBGRID里的内容导入同一个EXCEL表中?
- 如何将几个DBGRID里的内容导入同一个EXCEL表中 ---来自于CoolSlob博客
- 将DBGrid里的数据导入EXCEL的
- 如何将DBGrid 中的数据导入到EXCEL中
- 将datagrid中显示的内容导入到Excel中
- 将excel导入sqlserver2008的表中引发的问题
- 将DBGrid的数据导出到word和excel中
- 将DBGrid的数据导出到word和excel中
- 将excel表的内容导入mysql数据库的方法
- EXCEL里如何把一列中重复的内容删除
- 如何在Excel表的同一个单元格中换行?
- 01-如何在Excel表的同一个单元格中换行?
- 将Excel中的内容用asp.net导入到sql2000的表中
- 如何将EXCEL中同一个工作薄多张工作表合并
- 如何通过PHP将excel的数据导入MySQL中
- 如何通过PHP将excel的数据导入MySQL中
- 如何通过PHP将excel的数据导入MySQL中
- 如何解决 Windows Server 2003 中的启动问题
- 群集安装完整版
- 一组绝美风景图
- 李开复给中国学生的第三封信:成功、自信、快乐
- win2003服务器目录恢复
- 如何将几个DBGRID里的内容导入同一个EXCEL表中....的问题
- 清晨
- ASP.Net 2.0的新增功能
- VB.NET实现DirectDraw9 (1) 托管的DDraw
- 有关FreeBSD的几点误区
- 正确使用数据库连接
- 谁有兴趣翻译Spring in Action的请在这里留言。
- Soft Updates: 用于快速文件系统(FFS)的一项消除大多数同步写操作的技术
- 单元测试的新的感想