在线紧急求助:
在Delphi中如何把查询到的数据存储为一个文件(主要是Excel文件)???
请各位大侠帮帮忙,我忙了几天了,头都大了! 先谢谢大家了!
在Delphi中如何把查询到的数据存储为一个文件(主要是Excel文件)???
请各位大侠帮帮忙,我忙了几天了,头都大了! 先谢谢大家了!
解决方案 »
- rxrichedit中的数据保存到数据库,但不能将保存的数据在rxrichedit中显示出来?
- 求消息详解,100分,分不够再加
- 本人的编程资源在线网站www.delphi163.com开通,高兴,散分,来者有分
- SQL数据备份,在线等
- ADO的Recordset为什么不好用??
- 怎样实现dbgrid的精确定位,把指针知道特定位置????
- 自己建立的ActiveX控件如何设置其图标?
- 动态创建数据表
- TQuery Post 问题,在线等,解决立刻送分
- 如何在internet上给其他人使用自己开发的应用程序啊?
- 各位老大帮帮我关于锁表的问题
- 还是那个类里面的成员函数作hookproc的问题-------〉〉〉〉〉〉〉〉〉〉〉
use master
go
xp_cmdshell 'bcp "SELECT au_fname, au_lname FROM pubs..authors ORDER BY au_lname" queryout c:\stu.xls -c -Usa -P',NO_OUTPUTalso, you can make that sql script as a store procedured.================================================================
◆◆◆ CSDN查询助手,查询方便快捷◆◆◆ 下载地址:
http://CoolSlob.ifood1.com/Download/CSDNFinder.exe
http://CoolSlob.8u8.com/Download/Tools/CSDNFinder.Slob[更名为.exe即可]
我用的数据库是Delphi自带的Paradox的数据库,都是 .db文件,它的SQL语法功能很弱,我刚才试了上面的代码,有点问题,请问在这样的数据库下如何处理?
ExcelWorksheet1.Cells.Item[1,1]:=Edit1.Text;
往Excel中用循环写入
在程序里,你已经把数据显示在界面上。如果你的数据从数据库查询出来的时候是保存在对象里。那么,你可以用一个控件把保存数据的对象里的所有数据保存到Excel中。我以前写过把界面数据保存到Excel和Word的函数。但是不知道是否还可以找到。或许对你有用!
const
adClipString = 2;
ColumnDelimeter = ';';
RowDelimeter = #13#10;
var
s: string;
fs: TFileStream;
begin
adoquery1.open;
s := adoquery1.Recordset.GetString(adClipString, adoquery1.RecordCount,ColumnDelimeter,RowDelimeter ,'');
// export to a txt file
fs := TFileStream.Create('c:\Temp.CSV', fmCreate);
try
fs.WriteBuffer(s[1], Length(s));
finally
fs.Free;
end;
ShowMessage('Temp.CSV has been saved');
end;
end;//.csv文件可以被EXCEL识别并打开
procedure ExportToExcel(DataSet: TDataSet);
var
myexcel: Variant;
workbook: olevariant;
worksheet: olevariant;
i, j, n: Integer;
begin
try
myexcel:=createoleobject('excel.application');
myexcel.application.workbooks.add;
myexcel.caption:='例子';
myexcel.application.visible:=true;
workbook:=myexcel.application.workbooks[1];
worksheet:=workbook.worksheets.item[1];
except
showmessage('excel???');
end;
i:=1;
j:=1; if not DataSet.Active then Exit; DataSet.first;
for n:=0 to DataSet.fieldcount-1 do
begin
worksheet.cells(i, j):=DataSet.fields[n].displaylabel;
j:=j+1;
end;
DataSet.first;
while not DataSet.eof do
begin
inc(i);
for j:=0 to DataSet.fieldcount-1 do
worksheet.cells[i, j+1]:=DataSet.fields[j].asstring;
DataSet.Next;
end;end;
Unit excel; interface uses Windows,Messages,SysUtils,Classes,Graphics,Controls,Forms,Dialogs,StdCtrls,ComObj; //ComObj是操作OLE对象的函数集 type TForm1 =class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.Button1Click(Sender: TObject); var eclApp,WorkBook:Variant; //声明为OLE Automation 对象 xlsFileName:string;begin xlsFileName:='ex.xls'; try //创建OLE对象Excel Application与 WorkBook eclApp:=CreateOleObject('Excel.Application'); WorkBook:=CreateOleobject('Excel.Sheet'); except ShowMessage('您的机器里未安装Microsoft Excel。'); Exit; end; try ShowMessage('下面演示:新建一个XLS文件,并写入数据,最后关闭它。'); workBook:=eclApp.workBooks.Add; eclApp.Cells(1 , 1):='字符型'; eclApp.Cells(2 , 1):='Excel文件'; eclApp.Cells(1 , 2):='Money型'; eclApp.Cells(2 , 2):=10.01; eclApp.Cells(1 , 3):='日期型';eclApp.Cells(2 , 3):=Date; WorkBook.saveas(xlsFileName); WorkBook.close; ShowMessage('下面演示:打开刚创建的XLS文件,并修改其中的内容,然后,由用户决定是否保存。'); WorkBook:=eclApp.workBooks.Open(xlsFileName); eclApp.Cells(2 , 1):='Excel文件类型'; if MessageDlg(xlsFileName+'文件已被修改,是否保存?',mtConfirmation, [mbYes, mbNo], 0) = mrYes then WorkBook.save else workBook.Saved := True; //放弃修改 WorkBook.Close;
或者
asheet.quit;
此代码执行时,请问出现这样的错误是什么原因造成的?
application1
或者
quit 不能在 automaiton 情况下执行 我试验了好几次,把属性也调整了好几次,可还是出现这样的情况
使得我的EXCEL生成后,如果想在相应的目录下打开,就打不开请问是什么地方要调整? 先谢谢各位大虾的帮忙;)!
或者
asheet.quit;
此代码执行时,请问出现这样的错误是什么原因造成的?
application1
或者
quit 不能在 automaiton 情况下执行 我试验了好几次,把属性也调整了好几次,可还是出现这样的情况
使得我的EXCEL生成后,如果想在相应的目录下打开,就打不开请问是什么地方要调整? 先谢谢各位大虾的帮忙;)!
function DecTo26(Value:integer):string;
const STR_A='A';
var m,n:integer;
s:string;
begin
Result := '';
if (Value>=26*26) or (Value<0) then Exit;
s:='';
m := Value mod 26;
n := Value div 26;
if n>0 then s :=Chr(Ord('A')+n-1);
s := s+ Chr(Ord('A')+m);
Result := s;
end;
procedure SaveAsExcel(FileName:string);
var
ExcelApp,WorkBook: Variant;
i,j,k:integer; //i列No,j行No,k可见列
s:string;
SavePlace: TBook;
Range :Variant;
CurRecCount:integer;
begin
try
ExcelApp := CreateOleObject( 'Excel.Application' );
WorkBook := CreateOleObject('Excel.Sheet');
Except
Exception.Create('对不起,您的机器上没有安装Microsoft Excel,该文件不能生成!');
Exit;
End; //try...Except if FileExists(FileName) then
DeleteFile(FileName); SavePlace:=nil;
try
SavePlace := Query.GetBook;
Query.DisableControls;
Query.First;
try
ExcelApp.Visible := false;
ExcelApp.Caption := '查询导出文件';
WorkBook := ExcelApp.WorkBooks.Add; ExcelApp.ActiveSheet.Name := PrintTitle;
//导出标题...
k:=0;
for i := 0 to DBGrid.Columns.Count-1 do
begin
if not DBGrid.Columns[i].Visible then Continue;
ExcelApp.Cells(1,k+1) := DBGrid.Columns[i].Field.DisplayLabel;
if DBGrid.Columns[i].Field.DataType = ftString then
begin
ExcelApp.ActiveSheet.Columns[k+1].numberformatlocal:= '@';
if Assigned(DBGrid.Columns[i].Field.OnGetText) then
ExcelApp.ActiveSheet.Columns[k+1].ColumnWidth := 20 //需要代码转名称字段默认长度20
else
ExcelApp.ActiveSheet.Columns[k+1].ColumnWidth := DBGrid.Columns[i].Field.Size;
if Cardinal(DBGrid.Columns[i].Field.Size)<strlen(pchar(DBGrid.Columns[i].Field.DisplayLabel)) then
ExcelApp.ActiveSheet.Columns[k+1].ColumnWidth := strlen(pchar(DBGrid.Columns[i].Field.DisplayLabel));
end;
k:=k+1;
end; //导出每行数据...
j:=2;
while not Query.Eof do
begin
k:=0;
for i:=0 to DBGrid.Columns.Count-1 do
begin
if not DBGrid.Columns[i].Visible then Continue;
s := DBGrid.Columns[i].Field.DisplayText;
ExcelApp.Cells(j,k+1) := s;
k:=k+1;
end;//i
j:=j+1;
Query.Next; end; //标题栏字体,背景色
ExcelApp.ActiveSheet.Rows[1].Font.Name := '宋体';
ExcelApp.ActiveSheet.Rows[1].Font.Color := clBlack;
Range := ExcelApp.ActiveSheet.Range['A'+'1'+':'+DecTo26(k-1)+'1'];
Range.interior.Color := clSilver;
//自动加外边框
Range := ExcelApp.ActiveSheet.Range['A'+'1'+':'+DecTo26(k-1)+inttostr(j-1)];
Range.Borders.LineStyle := 1;
Range.WrapText:=True;
Range.VerticalAlignMent:= 1;
Range.HorizontalAlignment:=1; //保存文件
WorkBook.Saveas(FileName);
except
Application.MessageBox(PChar('生成Excel文件【'+FileName+'】出错!'),'提示',MB_OK+MB_ICONINFORMATION);
end;
finally
Query.EnableControls;
Query.GotoBook(SavePlace);
Query.FreeBook(SavePlace);
WorkBook.Close;
ExcelApp.Quit;
end;
end;
请问你的ExportToExcel(DataSet: TDataSet)程序,为什么我在调用时,会出现不兼容OLE类的错误。错误信息如下:Project sss.exe raised exception class Eoleexcepton message 'OLE error 800A03EC'.Proecss stoped.出现错误行为:
worksheet.cells[i, j+1]:=DataSet.fields[j].asstring;
谢谢
上面 to redfox01(小红帽) 的问题谁帮他/她再解决一下。
var
Temp_Worksheet: _WorkSheet;
i,j:integer;
begin
//关闭Excel.
Try
ExcelApplication1.Quit;
ExcelWorksheet1.Disconnect;
ExcelWorkbook1.Disconnect;
ExcelApplication1.Disconnect;
Except
End;
Try //打开Excel。
ExcelApplication1.Connect;
Except
End;
ExcelApplication1.Visible[0]:=True;
ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks.Add(EmptyParam,0));
Try //添加一个Worksheet。
Temp_Worksheet:=ExcelWorkbook1.
WorkSheets.Add(EmptyParam,EmptyParam,EmptyParam,EmptyParam,0)as _WorkSheet;//(注意)
ExcelWorkSheet1.ConnectTo(Temp_WorkSheet);
Except
exit;
End;
for i:=0 to dbgrid1.FieldCount-1 do//将表头导入EXCEL
begin
ExcelWorksheet1.Cells.item[1,i+1]:=dbgrid1.Columns.items[i].Title.Caption;
end;
//导入数据库中的数据至EXCEL
i:=2;
dbgrid1.DataSource.DataSet.First;
dbgrid1.DataSource.DataSet.DisableControls;
while not dbgrid1.DataSource.DataSet.Eof do
begin
for j:=0 to dbgrid1.FieldCount-1 do
begin
if dbgrid1.Fields[j]<>nil then
ExcelWorksheet1.Cells.item[i,j+1]:=trim(dbgrid1.Fields[j].asstring)
else
ExcelWorksheet1.Cells.item[i,j+1]:='';
end;
i:=i+1;
dbgrid1.DataSource.DataSet.Next;
end;
dbgrid1.DataSource.DataSet.EnableControls;
end;
WorkBook.SaveAs(filePath);
WorkBook.Close;
except
WorkBook.Close;
end;
ExcelApp.Quit;
ExcelApp := Unassigned;