DBGrid的数据为什么在导入电子表格时出现了这个问题?! (100分)

  • 主题发起人 主题发起人 QianQi
  • 开始时间 开始时间
Q

QianQi

Unregistered / Unconfirmed
GUEST, unregistred user!
我用的是TopGrid控件组中的TtsDBGrid
以下代码能运行,但是在另存后的电子表格文件中原来tsDBGrid中的第一条记录在电子表格中
显示为空,而其余的记录都显示正常,我怎么查也查不出原因,只能向大家请教了![:(]

procedure TForm1.ToExcel(Grid:TtsDBGrid;Query:TQuery);
var
I,J,Row,SelField:Integer;
begin
if SaveDialog1.Execute then
begin
try
ExcelApplication1.Connect;
ExcelApplication1.Workbooks.Add(Null,0);
ExcelWorkBook1.ConnectTo(ExcelApplication1.Workbooks[1]);
ExcelWorkSheet1.ConnectTo(ExcelWorkBook1.Sheets[1] as _WorkSheet);
except
Application.MessageBox('无法启动Excel,可能没有安装Excel!','提醒',mb_Ok);
Abort;
end;
Screen.Cursor:=crHourGlass;
SelField:=0;
for I:=1 to Grid.Cols do
begin
if Grid.Col.Visible<>False then
begin
SelField:=SelField+1;
ExcelWorkSheet1.Cells.Item[3,SelField]:=Grid.Col.FieldName;
end;
end;

row:=4;
Query.First;

while not Query.Eof do
begin

J:=0;
for I:=1 to Grid.Cols do
begin
if Grid.Col.Visible then
begin
J:=J+1;
ExcelWorkSheet1.Cells.Item[row,J]:=Grid.Field.AsString;
end;
end;
Row:=Row+1;

Query.Next;
end;


ExcelWorkBook1.SaveCopyAs(SaveDialog1.FileName+'.xls');
ExcelWorkBook1.Close(false);
ExcelApplication1.Disconnect;
ExcelApplication1.Quit;
Application.MessageBox('数据导出完毕','电子台帐',mb_Ok);
Screen.Cursor:=crDefault;
end;
end;
 
请参考以下代码,其中 L表示EXECEL中的行;col,row表示query或table的列、行
L:=1;
Col:=0;
for i:=0 to dm1.DWZFCX.FieldCount-1 do
begin
S:=dm1.DWZFCX.Fields.displaylabel;
Row:=L;
inc(Col);
xls1.AddStrCell(Col,row,SetAtribut,s);
end;
inc(L);
dm1.DWZFCX.first;
while not dm1.DWZFCX.EOF do
begin
col:=0;
for i:= 0 to dm1.DWZFCX.FieldCount-1 do
begin
S:=(dm1.DWZFCX.Fields).AsString;
Row:=L;
inc(Col);
if i=2 then
xls1.AdddoubleCell(Col,row,SetAtribut,strtofloat(s))
else
xls1.AddStrCell(Col,row,SetAtribut,s);
end;
dm1.DWZFCX.next;
Inc(L);
end;
这段代码经验证无误的,相信对你有帮助。
 
标题栏取不出?
 
谁能发现我的代码中是什么导致了错误
Form上有一个Query、一个Datasource、一个tsDBGrid、一个ExcelApplication、
一个ExcelBook、一个ExcelSheet
 
看来是没有人会来帮我解决这个问题了![:(]
 
没有用过tsDBGrid,不过,看
for I:=1 to Grid.Cols do
似乎有问题,一般程序中,无论是Col还是row,都是从0开始的。只能由你测试一下了。
 
var
MsExcel: oleVariant;
ExcelSheet1: Variant;
i:integer;
row: integer; //Excel行
bkm:tbookmark;
begin
try
MsExcel:=CreateOleObject('Excel.Application');
except
MessageBox(Handle,'初始化Excel错误。',
'error',MB_OK +MB_ICONERROR);
exit;
end;
Screen.Cursor:=crHourGlass;
MsExcel.Visible:=False;
MsExcel.WorkBooks.Add;
ExcelSheet1:= MsExcel.WorkBooks[1].WorkSheets[1];
isexport:=true;
bkm:=query1.getbookmark;
tsdbgrid1.DataSource.DataSet.DisableControls;
for i:=0 to Query1.Fields.Count -1 do
ExcelSheet1.Cells.Item[1,i+1]:=Query1.Fields.FieldName; //标题
query1.first;
row:=2;
while not Query1.Eof do
begin
for i:=0 to Query1.Fields.Count-1 do
begin
if not isexport then
begin
MsExcel.DiaplayAlert:=false ;
MsExcel.quit;
exit;
end;
application.ProcessMessages;
ExcelSheet1.Cells.Item[row,i+1]:=Query1.Fields.AsString;
end;
row:=row+1;
Query1.Next;
end;
try
query1.GotoBookmark(bkm);
finally
query1.freebookmark(bkm);
end;
MsExcel.QUIT;

tsdbgrid1.DataSource.DataSet.EnableControls;
Screen.Cursor:=crDefault;
END;
 
to QianQi
TopGrid控件组在那有的下载
 
后退
顶部