我想把查询结果导出到Excel中。坛子里有很多这方面的帖子,我也看了,但不知道如何入手!?
下面是我从坛子里copy的一段代码,调试一开始处就出错!
procedure TF_EpIqSyHCV.BitBtn_excelClick(Sender: TObject);
var
i,j,row,nall:integer;
ExcelApplication1:TExcelApplication; //提示错误[Error]Undeclared identifier:'TExcelApplication'
ExcelWorksheet1:TExcelWorksheet;
ExcelWorkbook1:TExcelWorkbook;
begin
...
end;
不知道如何下手修改啊!请高手指教,是不是要加个单元什么的啊?电脑上用的是Excel2003,应该如何写代码?谢谢!
下面是我从坛子里copy的一段代码,调试一开始处就出错!
procedure TF_EpIqSyHCV.BitBtn_excelClick(Sender: TObject);
var
i,j,row,nall:integer;
ExcelApplication1:TExcelApplication; //提示错误[Error]Undeclared identifier:'TExcelApplication'
ExcelWorksheet1:TExcelWorksheet;
ExcelWorkbook1:TExcelWorkbook;
begin
...
end;
不知道如何下手修改啊!请高手指教,是不是要加个单元什么的啊?电脑上用的是Excel2003,应该如何写代码?谢谢!
procedure TlinealertForm.BitBtn2Click(Sender: TObject);
var
eclApp,WorkBook:Variant;
xlsFileName:string;
iRowNow,iRowAll,iColNow,iColAll:integer;
begin
if DBGrid2.DataSource.DataSet.RecordCount <=0 then
begin
showmessage('数据为空!');
exit;
end;
xlsFileName:='c:\test.xls';
try //创建excel;
eclApp:=CreateOleObject('Excel.Application');
WorkBook:=CreateOleObject('Excel.sheet');
except
Application.Terminate;
end;
try
WorkBook:=eclApp.workbooks.add;
iColAll:=DBGrid2.Columns.Count;
iRowAll:=DBGrid2.DataSource.DataSet.RecordCount;
iColNow:=1;
while iColNow<=iColAll do//处理一行的不同列
begin
eclApp.cells(1,iColNow):=DBGrid2.Columns.Items[iColNow-1].Title.caption;
Inc(iColNow);
end;
iRowNow:=2 ;//第一行留做标题
begin//按格导入数据
DBGrid2.DataSource.DataSet.First;
while iRowNow<=iRowAll+1 do
begin
// DBGrid1.DataSource.DataSet.Fields[];
iColNow:=1;
while iColNow<=iColAll do//处理一行的不同列
begin
eclApp.cells(iRowNow,iColNow):=DBGrid2.Fields[iColNow-1].Text;
Inc(iColNow);
end;
DBGrid2.DataSource.DataSet.Next;
Inc(iRowNow);
end;
end;//按格导入数据
//测试
// eclApp.cells(1,1):='test';
savedialog1.InitialDir := ExtractFilePath(Application.ExeName);
if SaveDialog1.Execute then
begin
xlsFileName := SaveDialog1.FileName + '.xls';
ShowMessage('数据导出成功!'#13#10'导出文件为:' + xlsFileName);
WorkBook.saveas(xlsFileName);
WorkBook.close;
eclApp.quit;
// end
// else
// begin
// ShowMessage('系统出错,请重新打开系统!');
end;
except
ShowMessage('请检查是否正确安装MicroSoft Excel!');
end;
end;
ADBGrid: TDBGrid);
var
ExcelApp: Variant;
SaveFileDialog: TSaveDialog;
SaveToFile: string;
i, j: integer;
begin
if (not ADtset.Active) or (ADtset.RecordCount = 0) then Exit;
SaveToFile := '';
SaveFileDialog := TSaveDialog.Create(Application);
SaveFileDialog.Filter := '*.xls|*.xls';
if SaveFileDialog.Execute then
SaveToFile := SaveFileDialog.FileName;
if SaveToFile = '' then
exit;
screen.Cursor := crHourGlass;
try
ExcelApp := CreateOleObject('Excel.Application');
ExcelApp.WorkBooks.Add;
ExcelApp.WorkSheets[1].Activate;
ExcelApp.ActiveSheet.Rows[1].RowHeight := 30; for j := 0 to ADtset.FieldCount - 1 do
begin
ExcelApp.Cells[1, j + 1].Value := ADBGrid.Columns[j].Title.Caption;
end;
ADtset.First;
for i := 0 to ADtset.RecordCount - 1 do
begin
for j := 0 to ADtset.FieldCount - 1 do
begin
ExcelApp.Cells[i + 2, j + 1].Value :=ADtset.FieldByName(ADBGrid.Columns[j].FieldName).AsString;
ExcelApp.ActiveSheet.Columns[j + 1].ColumnWidth := 15;
end;
ADtset.Next;
end;
finally
try
ExcelApp.ActiveWorkBook.SaveAs(SaveToFile);
ExcelApp.ActiveWorkBook.saved := true;
ExcelApp.visible := true;
except on e: exception do
begin
MessageDlg(e.Message, mtInformation, [mbok], 0);
ExcelApp.ActiveWorkBook.saved := false;
end;
end;
end;
screen.Cursor := CrDefault;
end;
以前自己學習的時候寫的,不知道LZ是不是要這樣的效果
单击单元格时显示的又是10051007
奇怪?