delphi如何从数据库中按excel模版格式导出到excel
答案:3 悬赏:0 手机版
解决时间 2021-03-29 05:30
- 提问者网友:欺烟
- 2021-03-28 15:53
delphi如何从数据库中按excel模版格式导出到excel
最佳答案
- 五星知识达人网友:上分大魔王
- 2021-03-28 16:42
你可以手动写一个导出函数,以后直接使用它。
//===================================================
//===================ADOQ数据导出到Excel=========
//===================================================
Procedure ADOQOutPutToExcel(MyADOQ:TADOQuery;MyDBG:TDBGrid;SaveFileName:String;Gauge:TGauge);
Var Excel,WorkBook:OleVariant;
i,j,row:integer;
Begin
//检测计算机中是否安装了Excel,是否可以建立对象
Try
Excel:=CreateOleObject('Excel.Application');
Except
Begin
Application.MessageBox('你的计算机中没有安装Excel,无法导出到Excel!','警告',0);
Exit;
end;
end;
//====将数据写入到Excel
WorkBook:=Excel.WorkBooks.Add;//建立工作簿
//==写入标题
Gauge.MaxValue :=MyDBG.Columns.Count-1;
Gauge.Progress :=0;
For i:=0 to MyDBG.Columns.Count-1 DO
Begin
Excel.Cells[1,i+1].value:=MyDBG.Columns.Items[i].Title.Caption;
Gauge.Progress :=i;
End;
Gauge.Progress :=0;
//==写入记录
Row:=2;
MyADOQ.First;
Gauge.MinValue :=0;
Gauge.MaxValue :=MyADOQ.RecordCount;
Gauge.Progress :=0;
For i:=0 to MyADOQ.RecordCount-1 DO
Begin
For j:=0 to MyDBG.Columns.Count-1 DO
Begin
Excel.cells[row,j+1].value:=MyDBG.Fields[j].Value;
end;
Inc(Row);
Gauge.Progress :=Gauge.Progress +1;
MyADOQ.Next;
End;
//==保存到文件
Try
Begin
Excel.ActiveWorkBook.SaveAs(SaveFileName);
Excel:=UnAssigned;
WorkBook.Close;
Application.MessageBox(PChar('模板创建成功!模板已成功保存到:'+#13 +SaveFileName+'.xls'),'操作提示',0);
End;
Except
Begin
Application.MessageBox('模板创建失败,指定文件可能正在使用当中,请关闭文件再试一次!','操作提示',0);
Exit;
End;
End;
End;
调用时:
Var ExcelFileName:String;
begin
SaveDialog1.Filter:='数据表|*.xls|';
If SaveDialog1.Execute then
Begin
ExcelFileName:=SaveDialog1.FileName;
ADOQOutPutToExcel(ADOQ_yfd,DBG_yfd,ExcelFileName,Gauge);
End;
//===================================================
//===================ADOQ数据导出到Excel=========
//===================================================
Procedure ADOQOutPutToExcel(MyADOQ:TADOQuery;MyDBG:TDBGrid;SaveFileName:String;Gauge:TGauge);
Var Excel,WorkBook:OleVariant;
i,j,row:integer;
Begin
//检测计算机中是否安装了Excel,是否可以建立对象
Try
Excel:=CreateOleObject('Excel.Application');
Except
Begin
Application.MessageBox('你的计算机中没有安装Excel,无法导出到Excel!','警告',0);
Exit;
end;
end;
//====将数据写入到Excel
WorkBook:=Excel.WorkBooks.Add;//建立工作簿
//==写入标题
Gauge.MaxValue :=MyDBG.Columns.Count-1;
Gauge.Progress :=0;
For i:=0 to MyDBG.Columns.Count-1 DO
Begin
Excel.Cells[1,i+1].value:=MyDBG.Columns.Items[i].Title.Caption;
Gauge.Progress :=i;
End;
Gauge.Progress :=0;
//==写入记录
Row:=2;
MyADOQ.First;
Gauge.MinValue :=0;
Gauge.MaxValue :=MyADOQ.RecordCount;
Gauge.Progress :=0;
For i:=0 to MyADOQ.RecordCount-1 DO
Begin
For j:=0 to MyDBG.Columns.Count-1 DO
Begin
Excel.cells[row,j+1].value:=MyDBG.Fields[j].Value;
end;
Inc(Row);
Gauge.Progress :=Gauge.Progress +1;
MyADOQ.Next;
End;
//==保存到文件
Try
Begin
Excel.ActiveWorkBook.SaveAs(SaveFileName);
Excel:=UnAssigned;
WorkBook.Close;
Application.MessageBox(PChar('模板创建成功!模板已成功保存到:'+#13 +SaveFileName+'.xls'),'操作提示',0);
End;
Except
Begin
Application.MessageBox('模板创建失败,指定文件可能正在使用当中,请关闭文件再试一次!','操作提示',0);
Exit;
End;
End;
End;
调用时:
Var ExcelFileName:String;
begin
SaveDialog1.Filter:='数据表|*.xls|';
If SaveDialog1.Execute then
Begin
ExcelFileName:=SaveDialog1.FileName;
ADOQOutPutToExcel(ADOQ_yfd,DBG_yfd,ExcelFileName,Gauge);
End;
全部回答
- 1楼网友:十鸦
- 2021-03-28 17:04
关于操纵EXCEL增加行并保持设定好的格式的问题,我有个解决办法,不知道是不是符合你的意思:其实我只要事先在模板文件中将两行的格式设定好就行了,比如我把第7和第8行的底色设成灰色,你在DELPHI中就可以通过在第8行前插入行就OK了。var ExcelApp, MyWorkBook, sheet: OLEVariant;
f1: string;
i: integer;
begin ExcelApp := createoleobject('excel.application');
ExcelApp.visible := false;
ExcelApp.ScreenUpdating := false;
f1 := 'c:\模板文件.xls';
ExcelApp.WorkBooks.Open(f1);
MyWorkBook := ExcelApp.workbooks[1];
sheet := MyWorkBook.worksheets[1]; for i := 0 to table1.RecordCount - 1 do
begin
sheet.rows[8 + i].insert;
sheet.cells[8 + i, 1] := 'A';
sheet.cells[8 + i, 2] := 'B'; table1.next;
end; sheet.rows[7].delete; //删除仅为提供格式样板的多余空行
sheet.rows[7 + i].delete;...... //以下省略end;
f1: string;
i: integer;
begin ExcelApp := createoleobject('excel.application');
ExcelApp.visible := false;
ExcelApp.ScreenUpdating := false;
f1 := 'c:\模板文件.xls';
ExcelApp.WorkBooks.Open(f1);
MyWorkBook := ExcelApp.workbooks[1];
sheet := MyWorkBook.worksheets[1]; for i := 0 to table1.RecordCount - 1 do
begin
sheet.rows[8 + i].insert;
sheet.cells[8 + i, 1] := 'A';
sheet.cells[8 + i, 2] := 'B'; table1.next;
end; sheet.rows[7].delete; //删除仅为提供格式样板的多余空行
sheet.rows[7 + i].delete;...... //以下省略end;
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯