delphi如何从数据库中按excel模版格式导出到excel
如题,公司提交的工作报告是有格式的(模版),你也可以假设为实验报告什么之类的为了简化,假设涉及的数据库表为1个。那么如何从数据库中按模版格式导出到excel?回答问题几个...
如题,公司提交的工作报告是有格式的(模版),你也可以假设为实验报告什么之类的为了简化,假设涉及的数据库表为1个。那么如何从数据库中按模版格式导出到excel?回答问题几个注意:1.连接方式最好为ADO2.平台;delphi(如果你是学习其他语言者,请留下思路)3.一般公司给的excel工作报告模版里面的行列都是固定的,但是假如你工作量很大,工作项目很多,本来工作报告是一行写一个项目,模版提供5行空间,但是事实上呢工作项目为7,那么如何操作excel自增行?暂不考虑自增列,假设列空间足够4. 觉得50分太少,留句话,只要你思路什么的可以,加分无所谓。5.能给出完整Demo最好,如果你只对其中某部分有感触,都OK!6.接受算法,程序代码,思路...
展开
3个回答
2013-08-19
展开全部
关于操纵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;
展开全部
你可以手动写一个导出函数,以后直接使用它。
//===================================================
//===================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;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-08-19
展开全部
unit Form_Export;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, StdCtrls,ComObj;type
TfrmExport = class(TForm)
Edit1: TEdit;
Button1: TButton;
Button2: TButton;
Button3: TButton;
SaveDialog1: TSaveDialog;
ADODataSet1: TADODataSet;
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
frmExport: TfrmExport;implementation{$R *.dfm}uses Form_Setting;procedure TfrmExport.Button3Click(Sender: TObject);
begin
close;
end;procedure TfrmExport.FormCreate(Sender: TObject);
begin
ADODataSet1.ConnectionString := 'Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=' + frmSetting.Edit2.Text + ';Data Source=' + frmSetting.Edit1.Text;
end;procedure TfrmExport.Button1Click(Sender: TObject);
begin
SaveDialog1.Title := '请选择相应的Excel文件';
SaveDialog1.Filter := 'Excel(*.xls)|*.xls';
SaveDialog1.FileName:='成绩资料.xls';
if SaveDialog1.Execute then
edit1.Text := SaveDialog1.FileName;
end;procedure TfrmExport.Button2Click(Sender: TObject);
var
Excel: OleVariant;
begin
if (trim(edit1.Text) = '') then
begin
MessageBox(GetActiveWindow(), '请正确选择相关路径!', '警告', MB_OK +
MB_ICONWARNING);
exit;
end;
try
Excel := CreateOLEObject('Excel.Application');
except
Application.MessageBox('Excel没有安装!', '提示信息', MB_OK+MB_ICONASTERISK+MB_DEFBUTTON1+MB_APPLMODAL);
Exit;
end;
try
begin
Button2.Caption:='资料导出中,请稍等......';
ADODataSet1.Open;
ADODataSet1.SaveToFile(''+ edit1.Text +'',pfXML);
end except
Application.MessageBox('导出数据出错!请检查文件的格式是否正确!', '提示信息', MB_OK+MB_ICONASTERISK+MB_DEFBUTTON1+MB_APPLMODAL);
exit;
end;
Button2.Caption:='导出';
MessageBox(GetActiveWindow(), '数据导出成功!', '提示信息', MB_OK +
MB_ICONWARNING);
close;end;end.
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, StdCtrls,ComObj;type
TfrmExport = class(TForm)
Edit1: TEdit;
Button1: TButton;
Button2: TButton;
Button3: TButton;
SaveDialog1: TSaveDialog;
ADODataSet1: TADODataSet;
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
frmExport: TfrmExport;implementation{$R *.dfm}uses Form_Setting;procedure TfrmExport.Button3Click(Sender: TObject);
begin
close;
end;procedure TfrmExport.FormCreate(Sender: TObject);
begin
ADODataSet1.ConnectionString := 'Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=' + frmSetting.Edit2.Text + ';Data Source=' + frmSetting.Edit1.Text;
end;procedure TfrmExport.Button1Click(Sender: TObject);
begin
SaveDialog1.Title := '请选择相应的Excel文件';
SaveDialog1.Filter := 'Excel(*.xls)|*.xls';
SaveDialog1.FileName:='成绩资料.xls';
if SaveDialog1.Execute then
edit1.Text := SaveDialog1.FileName;
end;procedure TfrmExport.Button2Click(Sender: TObject);
var
Excel: OleVariant;
begin
if (trim(edit1.Text) = '') then
begin
MessageBox(GetActiveWindow(), '请正确选择相关路径!', '警告', MB_OK +
MB_ICONWARNING);
exit;
end;
try
Excel := CreateOLEObject('Excel.Application');
except
Application.MessageBox('Excel没有安装!', '提示信息', MB_OK+MB_ICONASTERISK+MB_DEFBUTTON1+MB_APPLMODAL);
Exit;
end;
try
begin
Button2.Caption:='资料导出中,请稍等......';
ADODataSet1.Open;
ADODataSet1.SaveToFile(''+ edit1.Text +'',pfXML);
end except
Application.MessageBox('导出数据出错!请检查文件的格式是否正确!', '提示信息', MB_OK+MB_ICONASTERISK+MB_DEFBUTTON1+MB_APPLMODAL);
exit;
end;
Button2.Caption:='导出';
MessageBox(GetActiveWindow(), '数据导出成功!', '提示信息', MB_OK +
MB_ICONWARNING);
close;end;end.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |