在delphi程序里已经将数据库表的数据转写到excel表里,请问在delphi程序里怎样保存该excel文件到硬盘
解决方案 »
- onmousemove移动控制多个BitBtn的位置。
- Webbrowser如何刷新,打开网页不发出刷新声音?
- Indy9实现三层结构,IDClient->IDServer->SQL Server,线程问题?
- 报表制作与打印
- 如何实现每页打印标题,我用的是QuickRep。高分请都高手。
- 为啥我异或字符串后就异或不回来了?
- 关于Delphi里使用微软speech5.1进行简单语音识别的例子么
- 我加赏100分
- 请问怎样判别一个程序是否执行 selectacc 表单?
- ORACLE
- 在线等:delphi用createthread创建线程时传参数问题
- 程序中如何将类似257664KB表示成“257,664KB”这样的形式?
var
iCount, jCount: Integer;
XLApp: Variant;
Sheet: Variant;
I: Integer;
begin
Screen.Cursor := crHourGlass;
if not VarIsEmpty(XLApp) then
begin
XLApp.DisplayAlerts := False;
XLApp.Quit;
VarClear(XLApp);
end; try
XLApp := CreateOleObject('Excel.Application');
except
Screen.Cursor := crDefault;
Exit;
end; XLApp.WorkBooks.Add;
XLApp.SheetsInNewWorkbook := High(Args) + 1; for I := Low(Args) to High(Args) do
begin
XLApp.WorkBooks[1].WorkSheets[I+1].Name := TDBGrid(Args[I].VObject).Name;
Sheet := XLApp.Workbooks[1].WorkSheets[TDBGrid(Args[I].VObject).Name]; if not TDBGrid(Args[I].VObject).DataSource.DataSet.Active then
begin
Screen.Cursor := crDefault;
Exit;
end; TDBGrid(Args[I].VObject).DataSource.DataSet.first;
for iCount := 0 to TDBGrid(Args[I].VObject).Columns.Count - 1 do
Sheet.Cells[1, iCount + 1] :=
TDBGrid(Args[I].VObject).Columns.Items[iCount].Title.Caption; jCount := 1;
while not TDBGrid(Args[I].VObject).DataSource.DataSet.Eof do
begin
for iCount := 0 to TDBGrid(Args[I].VObject).Columns.Count - 1 do
Sheet.Cells[jCount + 1, iCount + 1] :=
TDBGrid(Args[I].VObject).Columns.Items[iCount].Field.AsString; Inc(jCount);
TDBGrid(Args[I].VObject).DataSource.DataSet.Next;
end;
XlApp.Visible := True;
end;
Screen.Cursor := crDefault;
end;
procedure tform1.Button4Click(Sender: TObject);
begin
inherited;
CopyDbDataToExcel([dbgrid1]);
end;
//filename:保存的文件名
//DataSet: 就是表格连接的数据集
//DispTxt:打开xls文件后看到的标题(XXX报表)
function SavetoFile(filename:String;DataSet:TDataSet; DispTxt:String): Integer;
var
i,j,k:integer;
ColTitle,FieldData,Msg :string;
StrList :Tstringlist;
SaveDlg: TSaveDialog;
begin
try
//初始化
Result :=0;
if DataSet=nil then
Exit;
FieldData := '';
ColTitle := '';
StrList:=TStringList.Create; //加入字段名(列标题首先须改为汉字)
for k :=0 to (DataSet.FieldCount-1) do
begin
if not DataSet.Fields[K].Visible then
continue
else
ColTitle :=ColTitle+(DataSet.Fields[K].DisplayLabel)+#9;
end;
StrList.add(ColTitle);
//加入数据
with DataSet do
begin
First;
for j:=0 to (RecordCount-1) do
begin
FieldData:='';
for i:=0 to (FieldCount-1) do
begin
if not fields[i].Visible then
continue
else
begin
if i< FieldCount-1 then
FieldData:=FieldData+(DataSet.FieldByName(fields[i].FieldName).AsString)+#9
else
FieldData:=FieldData+(DataSet.FieldByName(fields[i].FieldName).AsString);
end;
end;
StrList.add(FieldData);
Next;
end;
end;
//文件覆盖提示
if FileExists(filename) then
begin
Msg := '已存在文件(' + filename + '),是否覆盖?';
if ShowAsk(PChar(Msg)) then
begin
//删除文件
DeleteFile(filename)
end
else
exit;
end;
//保存文件
StrList.savetofile(filename);
Result := DataSet.RecordCount; //返回记录数
finally
StrList.Free;
end;
end;