// 表格标题 for iLoop := 0 to makeDBGridEh.Columns.Count - 1 do xlSheet.WorkSheets[1].Cells[2, iLoop+1] := makeDBGridEh.Columns[iLoop].Title.Caption; // 数据 ARow := 3; with MakeDataSource.DataSet do begin DisableControls; First; while not Eof do begin for iLoop := 0 to Fields.Count - 1 do begin szValue := Fields[iLoop].Value; xlSheet.WorkSheets[1].Cells[ARow, iLoop+1] := szValue; end; Inc(ARow); Next; end; First; EnableControls; end; try xlSheet.SaveAs(FileName); Application.MessageBox('导出完毕!', '提示', MB_IconExclamation); finally xlSheet.Close; xlApp.Quit; xlApp := UnAssigned; end; except MessageBox(handle, '本机没有安装Excel.', '提示',MB_IconExclamation); end;end; ... uses Excel2000, {C:\Program Files\Borland\Delphi6\Imports}OleServer;procedure TFrmMain.WriteExcel(AdsData: TADODataSet; sName, Title: string); var ExcelApplication1: TExcelApplication; ExcelWorksheet1: TExcelWorksheet; ExcelWorkbook1: TExcelWorkbook; i, j: integer; filename: string; begin filename := concat(extractfilepath(application.exename), sName, '.xls'); try ExcelApplication1 := TExcelApplication.Create(Application); ExcelWorksheet1 := TExcelWorksheet.Create(Application); ExcelWorkbook1 := TExcelWorkbook.Create(Application); ExcelApplication1.Connect; except Application.Messagebox('Excel 没有安装!', 'Hello', MB_ICONERROR + mb_Ok); Abort; end; try ExcelApplication1.Workbooks.Add(EmptyParam, 0); ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks[1]); ExcelWorksheet1.ConnectTo(ExcelWorkbook1.Worksheets[1] as _worksheet); AdsData.First; for j := 0 to AdsData.Fields.Count - 1 do begin ExcelWorksheet1.Cells.item[3, j + 1] := AdsData.Fields[j].DisplayLabel; ExcelWorksheet1.Cells.item[3, j + 1].font.size := '10'; end; for i := 4 to AdsData.RecordCount + 3 do begin for j := 0 to AdsData.Fields.Count - 1 do begin ExcelWorksheet1.Cells.item[i, j + 1] :=AdsData.Fields[j].Asstring; ExcelWorksheet1.Cells.item[i, j + 1].font.size := '10'; end; AdsData.Next; end; ExcelWorksheet1.Columns.AutoFit; ExcelWorksheet1.Cells.item[1, 2] := Title; ExcelWorksheet1.Cells.Item[1, 2].font.size :='14'; ExcelWorksheet1.SaveAs(filename); Application.Messagebox(pchar('数据成功导出' + filename), 'Hello',mb_Ok); finally ExcelApplication1.Disconnect; ExcelApplication1.Quit; ExcelApplication1.Free; ExcelWorksheet1.Free; ExcelWorkbook1.Free; end; end;procedure Tfrmmain.FormCreate(Sender: TObject); begin WriteExcel(ADODataSet1, 'ergonge','hhh'); end;
function Tform1.ExportToExcel(Header: String; vDataSet: TDataSet): Boolean; var I,VL_I,j: integer; S,SysPath: string; MsExcel:Variant; begin Result:=true; if Application.MessageBox('您确定将数据导入到Excel吗?','提示!',MB_OKCANCEL + MB_DEFBUTTON1) = IDOK then begin SysPath:=ExtractFilePath(application.exename); with TStringList.Create do try vDataSet.First ; S:=S+Header; add(s); s:=''; For I:=0 to vDataSet.fieldcount-1 do begin If vDataSet.fields[I].visible=true then S:=S+#9+vDataSet.fields[I].displaylabel; end; system.Delete(s,1,1); add(s); while not vDataSet.Eof do begin S := ''; for I := 0 to vDataSet.FieldCount -1 do begin If vDataSet.fields[I].visible=true then S := S + #9 + vDataSet.Fields[I].AsString; end; System.Delete(S, 1, 1); Add(S); vDataSet.Next; end; Try SaveToFile(SysPath+'\Tem.xls'); Except ShowMessage('写文件时发生保护性错误,Excel 如在运行,请先关闭!'); Result:=false; exit; end; finally Free; end; Try MSExcel:=CreateOleObject('Excel.Application'); Except ShowMessage('Excel 没有安装,请先安装!'); Result:=false; exit; end; Try MSExcel.workbooks.open(SysPath+'\Tem.xls'); Except ShowMessage('打开临时文件时出错,请检查'+SysPath+'\Tem.xls'); Result:=false; exit; end; MSExcel.visible:=True; for VL_I :=1 to 4 do MSExcel.Selection.Borders[VL_I].LineStyle := 0; MSExcel.cells.select; MSExcel.Selection.HorizontalAlignment :=3; MSExcel.Selection.Borders[1].LineStyle := 0; MSExcel.Range['A1'].Select; MSExcel.Selection.Font.Size :=24; J:=0 ; for i:=0 to vdataset.fieldcount-1 do if vDataSet.fields[I].visible then J:=J+1; VL_I :=J; MSExcel.Range['A1:'+chr(VL_I+64)+'1'].Select; MSExcel.Range['A1:'+chr(VL_I+64)+'1'].Merge; end else Result:=false;end;
天啊,用Developer Express 中的cxGrid控件吧。功能强大无比,导出Excel等格式如此简单、快速... with SaveDialog1 do begin if SaveDialog1.execute then ExportGrid4ToEXCEL(SaveDialog1.filename,cxGrid1,True,True); ... end; (加入单元 USEs cxExportGrid4Link)
MakeDataSource: TDataSource; makeDBGrid: TDBGrid);
var
xlApp, xlSheet, szValue: Variant;
ARow, iLoop: word;
begin
xlApp := CreateOleObject('Excel.Application');
try
xlSheet := CreateOleObject('Excel.Sheet');
xlSheet := xlApp.WorkBooks.Add;
// 主标题
xlSheet.WorkSheets[1].Cells[1,1] := TitleCaption;
// 表格标题
for iLoop := 0 to makeDBGridEh.Columns.Count - 1 do
xlSheet.WorkSheets[1].Cells[2, iLoop+1] := makeDBGridEh.Columns[iLoop].Title.Caption; // 数据
ARow := 3;
with MakeDataSource.DataSet do
begin
DisableControls;
First;
while not Eof do
begin
for iLoop := 0 to Fields.Count - 1 do
begin
szValue := Fields[iLoop].Value;
xlSheet.WorkSheets[1].Cells[ARow, iLoop+1] := szValue;
end;
Inc(ARow);
Next;
end;
First;
EnableControls;
end; try
xlSheet.SaveAs(FileName);
Application.MessageBox('导出完毕!', '提示', MB_IconExclamation);
finally
xlSheet.Close;
xlApp.Quit;
xlApp := UnAssigned;
end;
except
MessageBox(handle, '本机没有安装Excel.', '提示',MB_IconExclamation);
end;end;
...
uses Excel2000, {C:\Program Files\Borland\Delphi6\Imports}OleServer;procedure TFrmMain.WriteExcel(AdsData: TADODataSet; sName, Title: string);
var
ExcelApplication1: TExcelApplication;
ExcelWorksheet1: TExcelWorksheet;
ExcelWorkbook1: TExcelWorkbook;
i, j: integer;
filename: string;
begin
filename := concat(extractfilepath(application.exename), sName, '.xls');
try
ExcelApplication1 := TExcelApplication.Create(Application);
ExcelWorksheet1 := TExcelWorksheet.Create(Application);
ExcelWorkbook1 := TExcelWorkbook.Create(Application);
ExcelApplication1.Connect;
except
Application.Messagebox('Excel 没有安装!', 'Hello', MB_ICONERROR + mb_Ok);
Abort;
end;
try
ExcelApplication1.Workbooks.Add(EmptyParam, 0);
ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks[1]);
ExcelWorksheet1.ConnectTo(ExcelWorkbook1.Worksheets[1] as _worksheet);
AdsData.First;
for j := 0 to AdsData.Fields.Count - 1 do
begin
ExcelWorksheet1.Cells.item[3, j + 1] := AdsData.Fields[j].DisplayLabel;
ExcelWorksheet1.Cells.item[3, j + 1].font.size := '10';
end;
for i := 4 to AdsData.RecordCount + 3 do
begin
for j := 0 to AdsData.Fields.Count - 1 do
begin
ExcelWorksheet1.Cells.item[i, j + 1] :=AdsData.Fields[j].Asstring;
ExcelWorksheet1.Cells.item[i, j + 1].font.size := '10';
end;
AdsData.Next;
end;
ExcelWorksheet1.Columns.AutoFit;
ExcelWorksheet1.Cells.item[1, 2] := Title;
ExcelWorksheet1.Cells.Item[1, 2].font.size :='14';
ExcelWorksheet1.SaveAs(filename);
Application.Messagebox(pchar('数据成功导出' + filename), 'Hello',mb_Ok);
finally
ExcelApplication1.Disconnect;
ExcelApplication1.Quit;
ExcelApplication1.Free;
ExcelWorksheet1.Free;
ExcelWorkbook1.Free;
end;
end;procedure Tfrmmain.FormCreate(Sender: TObject);
begin
WriteExcel(ADODataSet1, 'ergonge','hhh');
end;
vDataSet: TDataSet): Boolean;
var
I,VL_I,j: integer;
S,SysPath: string;
MsExcel:Variant;
begin
Result:=true;
if Application.MessageBox('您确定将数据导入到Excel吗?','提示!',MB_OKCANCEL + MB_DEFBUTTON1) = IDOK then
begin
SysPath:=ExtractFilePath(application.exename);
with TStringList.Create do
try
vDataSet.First ;
S:=S+Header;
add(s);
s:='';
For I:=0 to vDataSet.fieldcount-1 do
begin
If vDataSet.fields[I].visible=true then
S:=S+#9+vDataSet.fields[I].displaylabel;
end;
system.Delete(s,1,1);
add(s);
while not vDataSet.Eof do
begin
S := '';
for I := 0 to vDataSet.FieldCount -1 do
begin
If vDataSet.fields[I].visible=true then
S := S + #9 + vDataSet.Fields[I].AsString;
end;
System.Delete(S, 1, 1);
Add(S);
vDataSet.Next;
end;
Try
SaveToFile(SysPath+'\Tem.xls');
Except
ShowMessage('写文件时发生保护性错误,Excel 如在运行,请先关闭!');
Result:=false;
exit;
end;
finally
Free;
end;
Try
MSExcel:=CreateOleObject('Excel.Application');
Except
ShowMessage('Excel 没有安装,请先安装!');
Result:=false;
exit;
end;
Try
MSExcel.workbooks.open(SysPath+'\Tem.xls');
Except
ShowMessage('打开临时文件时出错,请检查'+SysPath+'\Tem.xls');
Result:=false;
exit;
end;
MSExcel.visible:=True;
for VL_I :=1 to 4 do
MSExcel.Selection.Borders[VL_I].LineStyle := 0;
MSExcel.cells.select;
MSExcel.Selection.HorizontalAlignment :=3;
MSExcel.Selection.Borders[1].LineStyle := 0; MSExcel.Range['A1'].Select;
MSExcel.Selection.Font.Size :=24; J:=0 ;
for i:=0 to vdataset.fieldcount-1 do
if vDataSet.fields[I].visible then
J:=J+1; VL_I :=J;
MSExcel.Range['A1:'+chr(VL_I+64)+'1'].Select;
MSExcel.Range['A1:'+chr(VL_I+64)+'1'].Merge;
end
else
Result:=false;end;
with SaveDialog1 do
begin
if SaveDialog1.execute then
ExportGrid4ToEXCEL(SaveDialog1.filename,cxGrid1,True,True);
...
end;
(加入单元 USEs cxExportGrid4Link)
是不是把你的程序复制到form中就可以了?还有什么设置吗?procedure TfrmGlobal.DBGridInFoToExcel(FileName, TitleCaption: string;
MakeDataSource: TDataSource; makeDBGrid: TDBGrid);
这个是什么事件?