delphi 7.0 导出数据到 excel 求救 请教 如题 谢谢 !! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 看看这个,是否可以http://blog.csdn.net/zxf_feng/archive/2008/03/03/2142264.aspx /******* 导出到excel EXEC master..xp_cmdshell 'bcp SettleDB.dbo.shanghu out c:\temp1.xls -c -q -S"GNETDATA/GNETDATA" -U"sa" -P""' 从DBGrid,StringGrid导出Excel procedure TDM.CopyDbDataToExcel(Target: TDBGridEh;mb,FileName: string);variCount, jCount: Integer;XLApp: Variant;Sheet: Variant;beginScreen.Cursor := crHourGlass;if not VarIsEmpty(XLApp) thenbegin XLApp.DisplayAlerts := False; XLApp.Quit; VarClear(XLApp);end;//--------------------------选择模板------// CopyFile(pChar(Trim(ExtractFilePath(Application.ExeName))+mb+'.xls'),pChar(FileName+'1.xls'),false);//------------------------//通过ole创建Excel对象try XLApp := CreateOleObject('Excel.Application');except Screen.Cursor := crDefault; Exit;end;if mb = '统计-项目信息前' then XLApp.WorkBooks.Add[Trim(ExtractFilePath(Application.ExeName))+mb+'.xls'] //你要把数据放在那里啊,先生成个文件在e:\1.xlselse XLApp.WorkBooks.Add;XLApp.WorkBooks[1].WorkSheets[1].Name := 'sheet1';Sheet := XLApp.Workbooks[1].WorkSheets['sheet1'];if not Target.DataSource.DataSet.Active thenbegin Screen.Cursor := crDefault; Exit;end;Target.DataSource.DataSet.first;for iCount := 0 to Target.Columns.Count - 1 dobegin Sheet.cells[1, iCount + 1] := trim(Target.Columns.Items[iCount].Title.Caption);end;jCount := 1;while not Target.DataSource.DataSet.Eof dobegin for iCount := 0 to Target.Columns.Count - 1 do // begin if iCount = 0 then Sheet.cells[jCount + 1, iCount + 1] := IntToStr(jCount) else Sheet.cells[jCount + 1, iCount + 1] := trim(Target.Columns.Items[iCount].Field.AsString); end;Inc(jCount);Target.DataSource.DataSet.Next;end;//--------------------可以在此添加Excel的宏-----------XLApp.ActiveWorkbook.SaveAs(FileName:=FileName); ;Screen.Cursor := crDefault;XLApp.ActiveWorkbook.Close;end;-----------------------------------------StringGridToExcelprocedure TDM.CopySGDataToExcel(Target: TStringGrid;FileName: string);variCount, jCount: Integer;XLApp: Variant;Sheet: Variant;beginScreen.Cursor := crHourGlass;if not VarIsEmpty(XLApp) thenbeginXLApp.DisplayAlerts := False;XLApp.Quit;VarClear(XLApp);end;//通过ole创建Excel对象tryXLApp := CreateOleObject('Excel.Application');exceptScreen.Cursor := crDefault;Exit;end;XLApp.WorkBooks.Add; //你要把数据放在那里啊,先生成个文件在e:\1.xlsXLApp.WorkBooks[1].WorkSheets[1].Name := 'sheet1';Sheet := XLApp.Workbooks[1].WorkSheets['sheet1'];Target.Row := 0;for iCount := 0 to Target.RowCount - 1 dobegin for jCount := 0 to Target.ColCount - 1 do Sheet.cells[iCount + 1, jCount + 1] := Target.Cells[jCount,iCount]; Target.Row := iCount;end;XLApp.ActiveWorkbook.SaveAs(FileName:=FileName);Screen.Cursor := crDefault;XLApp.ActiveWorkbook.Close;end; 以上的这么麻烦,来个简单的{前题ADOQUERY控件的SQL句 select x_a as 工号,x_b 姓名,x_c 部门 from x_eng 加入AS是为了标题显示中文}//方法:procedure TForm1.DataSetToExcel(ADataSet: TCustomADODataSet; const AFileName: string);var Table, ExcelApp, ExcelBook, ExcelSheet: Variant;begin if not ADataSet.Active then Exit; ExcelApp := CreateOleObject('Excel.Application'); ExcelApp.DisplayAlerts := False; ExcelBook := ExcelApp.WorkBooks.Add; ExcelSheet := ExcelBook.Sheets.Item[1]; Table := ExcelSheet.QueryTables.Add(ADataSet.Recordset, ExcelSheet.Range['A1']); Table.Refresh(True); ExcelBook.Close(True, AFileName);end;//调用procedure TForm1.Button1Click(Sender: TObject);begin if SaveDialog1.Execute then begin DataSetToExcel(ADOquery1, SaveDialog1.FileName); end;end; 多线程局部变量的问题 有D7版本专用的SReport组件吗?? 用Delphi如何读取Wav文件的波形,并且显示? 如何实现多线程 在delphi7.0下,怎么加入Quick Report? Delphi的一个恼火的问题 好高深的技术难题呀! 如何取一个字符串的后面的几位数?等!!!1 为什么要Tclientsocket???? 子鱼求救:怎样才能使用dbgrid中的数据进行计算? 谁可以用delphi调用这个sys驱动恢复SSDT,谢谢帮忙了! 百度HI邀请码发放!
http://blog.csdn.net/zxf_feng/archive/2008/03/03/2142264.aspx
EXEC master..xp_cmdshell 'bcp SettleDB.dbo.shanghu out c:\temp1.xls -c -q -S"GNETDATA/GNETDATA" -U"sa" -P""'
procedure TDM.CopyDbDataToExcel(Target: TDBGridEh;mb,FileName: string);
var
iCount, jCount: Integer;
XLApp: Variant;
Sheet: Variant;
begin
Screen.Cursor := crHourGlass;
if not VarIsEmpty(XLApp) then
begin
XLApp.DisplayAlerts := False;
XLApp.Quit;
VarClear(XLApp);
end;
//--------------------------选择模板------
// CopyFile(pChar(Trim(ExtractFilePath(Application.ExeName))+mb+'.xls'),pChar(FileName+'1.xls'),false);
//------------------------
//通过ole创建Excel对象
try
XLApp := CreateOleObject('Excel.Application');
except
Screen.Cursor := crDefault;
Exit;
end;
if mb = '统计-项目信息前' then
XLApp.WorkBooks.Add[Trim(ExtractFilePath(Application.ExeName))+mb+'.xls'] //你要把数据放在那里啊,先生成个文件在e:\1.xls
else
XLApp.WorkBooks.Add;
XLApp.WorkBooks[1].WorkSheets[1].Name := 'sheet1';
Sheet := XLApp.Workbooks[1].WorkSheets['sheet1'];
if not Target.DataSource.DataSet.Active then
begin
Screen.Cursor := crDefault;
Exit;
end;
Target.DataSource.DataSet.first;for iCount := 0 to Target.Columns.Count - 1 do
begin
Sheet.cells[1, iCount + 1] := trim(Target.Columns.Items[iCount].Title.Caption);
end;jCount := 1;
while not Target.DataSource.DataSet.Eof do
begin for iCount := 0 to Target.Columns.Count - 1 do //
begin
if iCount = 0 then
Sheet.cells[jCount + 1, iCount + 1] := IntToStr(jCount)
else
Sheet.cells[jCount + 1, iCount + 1] := trim(Target.Columns.Items[iCount].Field.AsString);
end;
Inc(jCount);
Target.DataSource.DataSet.Next;
end;//--------------------可以在此添加Excel的宏-----------XLApp.ActiveWorkbook.SaveAs(FileName:=FileName); ;
Screen.Cursor := crDefault;
XLApp.ActiveWorkbook.Close;
end;
-----------------------------------------StringGridToExcelprocedure TDM.CopySGDataToExcel(Target: TStringGrid;FileName: string);
var
iCount, jCount: Integer;
XLApp: Variant;
Sheet: Variant;
begin
Screen.Cursor := crHourGlass;
if not VarIsEmpty(XLApp) then
begin
XLApp.DisplayAlerts := False;
XLApp.Quit;
VarClear(XLApp);
end;
//通过ole创建Excel对象
try
XLApp := CreateOleObject('Excel.Application');
except
Screen.Cursor := crDefault;
Exit;
end;
XLApp.WorkBooks.Add; //你要把数据放在那里啊,先生成个文件在e:\1.xls
XLApp.WorkBooks[1].WorkSheets[1].Name := 'sheet1';
Sheet := XLApp.Workbooks[1].WorkSheets['sheet1'];
Target.Row := 0;
for iCount := 0 to Target.RowCount - 1 do
begin
for jCount := 0 to Target.ColCount - 1 do
Sheet.cells[iCount + 1, jCount + 1] := Target.Cells[jCount,iCount];
Target.Row := iCount;
end;
XLApp.ActiveWorkbook.SaveAs(FileName:=FileName);
Screen.Cursor := crDefault;
XLApp.ActiveWorkbook.Close;
end;
procedure TForm1.DataSetToExcel(ADataSet: TCustomADODataSet;
const AFileName: string);
var
Table, ExcelApp, ExcelBook, ExcelSheet: Variant;
begin
if not ADataSet.Active then Exit;
ExcelApp := CreateOleObject('Excel.Application');
ExcelApp.DisplayAlerts := False;
ExcelBook := ExcelApp.WorkBooks.Add;
ExcelSheet := ExcelBook.Sheets.Item[1];
Table := ExcelSheet.QueryTables.Add(ADataSet.Recordset, ExcelSheet.Range['A1']);
Table.Refresh(True);
ExcelBook.Close(True, AFileName);
end;//调用
procedure TForm1.Button1Click(Sender: TObject);
begin
if SaveDialog1.Execute then begin
DataSetToExcel(ADOquery1, SaveDialog1.FileName);
end;
end;