delphi7 导出EXCEL的数据是重复的

[复制链接]
查看11 | 回复2 | 2011-6-21 01:04:14 | 显示全部楼层 |阅读模式
我在网上找了一个代码,可以直接调用。但是导出EXCEL的时候有重复数据。测试后发现查询过几次,数据就重复几次,我估计是代码问题。。哪位高手帮我看一下,代码哪里不对。万分感谢!
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;
XLApp.SheetsInNewWorkbook := High(Args) + 1;
for I := Low(Args) to High(Args) do
begin

XLApp.WorkBooks[1].WorkSheets[I+1].Name := TDBGrideh(Args[I].VObject).Name;

Sheet := XLApp.Workbooks[1].WorkSheets[TDBGrideh(Args[I].VObject).Name];

if not TDBGrideh(Args[I].VObject).DataSource.DataSet.Active then

begin

Screen.Cursor := crDefault;

Exit;

end;

TDBGrideh(Args[I].VObject).DataSource.DataSet.first;

for iCount := 0 to TDBGrideh(Args[I].VObject).Columns.Count - 1 do

Sheet.Cells[1, iCount + 1] :=

TDBGrideh(Args[I].VObject).Columns.Items[iCount].Title.Caption;

jCount := 1;

while not TDBGrideh(Args[I].VObject).DataSource.DataSet.Eof do

begin

for iCount := 0 to TDBGrideh(Args[I].VObject).Columns.Count - 1 do

Sheet.Cells[jCount + 1, iCount + 1] :=

TDBGrideh(Args[I].VObject).Columns.Items[iCount].Field.AsString;

Inc(jCount);

TDBGrideh(Args[I].VObject).DataSource.DataSet.Next;

end;

XlApp.Visible := True;
end;
Screen.Cursor := crDefault;
end;
是我自己没小心看,不是代码的问题。。。是DBGRID的问题。每次查询,DBGRIDEH里面都会把最后一次查询的结果,列的内容重复几次。。。
实在不好意思,我找出了最终的原因 了,是因为我在查询按钮添加了动态增加dbgrideh列对象的代码:
var

ColEh:TColumnEh;
begin

//列属性初始化

ColEh:=DBGridEh1.Columns.Add;

ColEh.FieldName:='商品代码';

ColEh.Title.TitleButton:=True;
......................
我这样做是为了点击列标题后自动排序,但每查询一次就会生成新的列。。。我现在把代码都放到窗体初始化里,就没有问题了。。谢谢大家的回答,学到了很多东西!

回复

使用道具 举报

千问 | 2011-6-21 01:04:14 | 显示全部楼层
TDBGrideh(Args[I].VObject).DataSource.DataSet.first;//移动指针到数据集第一条
for iCount := 0 to TDBGrideh(Args[I].VObject).Columns.Count - 1 do
Sheet.Cells[1, iCount + 1] :=
TDBGrideh(Args[I].VObject).Columns.Items[iCount].Title.Caption;//列标题导出,在EXCEL第一行
jCount := 1;//从EXCEL第二行开始写
while not TDBGrideh(Args[I].VO...
回复

使用道具 举报

千问 | 2011-6-21 01:04:14 | 显示全部楼层
是在导出到Execel时对行和列弄反了,数据只移到列中,应该移动行才正确重复的数据只是列重复:比如A
B1
2导出来则是A
B
1
2
A
B1
2...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行