DELPHI ,SQL SERVER后台,如何将数据表导出到EXCEL文件中?谢谢
解决方案 »
- 如何在DBNavigator中增加一个可以设置caption的属性
- 中间层为Com,为何远程不能连接
- Windows Socket Error: (11001), on API 'Async Lookup'------200分
- 有谁能告诉我StringGrid的用法!希望能具体一点!
- 求oicq或者icq类似功能程序(delphi开发)
- 大家快来看Delphi8的新界面,我在Google上面搜索到的!
- ☆☆☆☆☆高分寻求答案~~!!!☆☆☆☆☆
- 求一个sql语句!!!在线等,,,急需!!
- 关于QuickRep和打印的问题?Somebody help me!
- 再次送22分!!
- 怎样在DBGRIDEH的左边,显示行号。不要再新建个列,就像EXCEL一样~~~!!!!!!!!!!
- 怎么才能知道数据控件的SQL语句执行的情况呢??我的分全送光了对不起大家了|!
procedure TAccountThread.Execute;
var i,j:integer;
v,range:variant;
begin
{ Place thread code here }
FreeOnTerminate:=True;
if varIsEmpty(v) then
v:=createOleObject('excel.Application');
v.workBooks.Add;
v.WorkBooks[1].workSheets[1].name:='银行帐号表';
//把银行帐号表的数据导出到Excel表中
range:=v.WorkBooks[1].WorkSheets['银行帐号表'].Range['A1:D1'];
range.merge;
v.cells[1,1]:='恩平市人民医院职工工资帐号表';
Dmodule.AccountADOTable.First;
v.cells[2,1]:='帐号';
v.cells[2,2]:='姓名';
v.cells[2,3]:='所属部门';
v.cells[2,4]:='实发工资';
i:=3;j:=1;
while not Dmodule.AccountADOTable.Eof do
begin
v.Cells[i,j]:=DModule.AccountADOTable.FieldByName('帐号').AsString;
inc(j);
v.Cells[i,j]:=DModule.AccountADOTable.FieldByName('姓名').AsString;
inc(j);
v.Cells[i,j]:=DModule.AccountADOTable.FieldByName('所属部门').AsString;
inc(j);
v.Cells[i,j]:=DModule.AccountADOTable.FieldByName('实发工资').AsString;
j:=1;
Dmodule.AccountADOTable.Next;
inc(i);
end;
v.visible:=True;
end;
uses ComObj;procedure TmainForm.QueryInFoToExcel(FileName, TitleCaption: string; makeQuery: TQuery);
var
xlApp, xlSheet, szValue: Variant;
ARow, iLoop: word;
begin
if FileExists(FileName) and (MessageDlg('此文件已存在,需要覆盖吗?',mtConfirmation, [mbYes, mbNo], 0) = mrYes) then
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 ShowQuery.Fields.Count - 1 do
xlSheet.WorkSheets[1].Cells[2, iLoop+1] := makeQuery.FieldDefs[iLoop].Name; // 数据
ARow := 3;
with MakeQuery 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;
end;procedure TmainForm.Button2Click(Sender: TObject);
begin
if SaveDialog1.Execute then
begin
case PageControl1.ActivePageIndex of
0:QueryInFoToExcel(SaveDialog1.FileName,'准备打印记录表 导出时间:'+DatetimeToStr(Now),ShowQuery);
1:QueryInFoToExcel(SaveDialog1.FileName,'无效记录表 导出时间:'+DatetimeToStr(Now),ShowQuery);
2:QueryInFoToExcel(SaveDialog1.FileName,'不打印记录表 导出时间:'+DatetimeToStr(Now),ShowQuery);
3:QueryInFoToExcel(SaveDialog1.FileName,'全部记录表 导出时间:'+DatetimeToStr(Now),ShowQuery);
end;
end;
end;
var
Ds_Master:Tdataset;
ExcelApplication1:TExcelApplication;
ExcelWorksheet1:TExcelWorksheet;
ExcelWorkbook1:TExcelWorkbook;
i,j:integer;
stringlist1:Tstringlist;
str1:string;
range1:string;
begin
Ds_Master:=Sinput.DataSource.DataSet;
if Ds_Master.IsEmpty or (not Ds_Master.Active) then
exit
else
begin
Ds_Master.DisableControls;
Ds_Master.First;
try
ExcelApplication1:=TExcelApplication.Create(Application);
ExcelWorksheet1:=TExcelWorksheet.Create(Application);
ExcelWorkbook1:=TExcelWorkbook.Create(Application);
ExcelApplication1.Connect;
except
Application.MessageBox('Excel 没有安装','系统提示',
MB_IConERROR + mb_Ok);
Abort;
end;
end; try
screen.Cursor:=crsqlwait;
ExcelApplication1.Workbooks.Add(emptyparam,0);
ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks[1]);
ExcelWorksheet1.ConnectTo(ExcelWorkbook1.Worksheets[1]as _worksheet);
for j :=0 to Ds_Master.FieldCount-1 do
begin
ExcelWorksheet1.Cells.Item[1,j+1]:=Ds_Master.Fields[j].DisplayLabel;
ExcelWorksheet1.Cells.Item[1,j+1].font.size:='14';
end;
stringlist1:=Tstringlist.Create;
clipboard.Clear;
with Ds_Master do
begin
open;
first;
end;
while not Ds_Master.Eof do
begin
str1:='';
for i := 0 to Ds_Master.FieldCount-1 do
begin
str1:=str1+Ds_Master.Fields[i].AsString+#9;
Application.ProcessMessages;
end;
stringlist1.Add(str1);
Ds_Master.Next;
end;
//dataset.Free;
//dataset.Refresh;
clipboard.AsText:=stringlist1.Text;
i:=Ds_Master.FieldCount;
j:=Ds_Master.RecordCount+1; //ExcelWorksheet1.Cells.i
//i:=cells.
//ExcelWorksheet1.Paste; //从A1开始粘贴
//srt1:=ExcelWorksheet1.Cells.Item[i,j];
//ExcelWorksheet1.Range['a2','z1000'].PasteSpecial(0,0,0,0);
//ExcelWorksheet1.Range['a2','b4'].PasteSpecial(0,0,0,0);
//i:=ExcelWorksheet1.Cells.Row[2];
//j:=ExcelWorksheet1.Cells.Rows.Column;
//fortest:=string(ExcelWorksheet1.Cells.Name);
//fortest:=ExcelWorksheet1.Cells.Item[j,i];
//fortest:=string(ExcelWorksheet1.Cells.Range[i,j] );
//ExcelWorksheet1.Range['a2'].PasteSpecial(0,0,0,0);
range1:=excelrange(j,i);
ExcelWorksheet1.Range['a2',range1].PasteSpecial(0,0,0,0);
stringlist1.Free;
clipboard.Clear;
ExcelWorksheet1.Columns.AutoFit;
ExcelApplication1.Disconnect;
ExcelApplication1.Visible[0]:=true;
screen.Cursor:=crdefault;
//dataset.Refresh;
Ds_Master.EnableControls;
Application.MessageBox('数据转换成功!','系统',
MB_ICONINFORMATION+Mb_ok);
except
stringlist1.Free;
clipboard.Clear;
ExcelApplication1.Disconnect;
ExcelApplication1.Quit;
ExcelApplication1.Free;
ExcelWorkbook1.Free;
ExcelWorksheet1.Free;
screen.Cursor:=crdefault;
Application.MessageBox('错误!','数据转换失败!',
Mb_iconerror+Mb_ok);
Ds_Master.EnableControls;
end;
end;
先把表的数据导到richedi每列用#9隔开,没条记录后加上#$A#$D