存为access数据库: procedure ExportToExcel(Dataset:TDataset); var Range,WorkBook,Sheet,Excel:variant; CurCol,col,row:integer; FrmWait:TFrmWait; begin Excel:=CreateOleObject('Excel.Application'); FrmWait:=TFrmWait.Create(application); try FrmWait.Show; // Excel.visible:=true; Application.ProcessMessages; Excel.DisplayAlerts:=false; Excel.WorkBooks.Add; WorkBook:=Excel.WorkBooks[1]; Sheet := WorkBook.WorkSheets[1]; CurCol:=0; Row:=4; //从第四行,第二列开始输出 for col:=1 to DataSet.FieldCount do //输出标题 if DataSet.Fields[Col-1].Visible then begin Sheet.Cells[Row,CurCol+2]:=DataSet.Fields[Col-1].DisplayLabel; inc(CurCol); end; inc(Row); //数据从第五行开始输出 DataSet.DisableControls; FrmWait.ProgressBar1.Max:=TDataQuery(DataSet).FilterRows; FrmWait.Label2.Caption:=format('估计用时:%f 秒',[FrmWait.ProgressBar1.Max/40]); DataSet.First; while not Dataset.Eof do begin CurCol:=0; for Col:=1 to DataSet.FieldCount do if DataSet.Fields[Col-1].Visible then begin Sheet.Cells[Row,CurCol+2]:=DataSet.Fields[Col-1].DisplayText; inc(CurCol); end; DataSet.Next; inc(Row); FrmWait.ProgressBar1.Position:=Row; FrmWait.Label2.Caption:=format('估计用时:%f 秒',[(FrmWait.ProgressBar1.Max-FrmWait.ProgressBar1.Position)/40]); if FrmWait.ConFirmQuit then if YesNoBox('确定要取消当前操作吗?') then begin Dataset.EnableControls; Excel.quit; exit; end else FrmWait.ConFirmQuit:=false; Application.ProcessMessages; end; Range:=Sheet.Range['1:65536']; Range.Verticalalignment:= -4108;//Center; //垂直中对齐 //选择画表格线的范围 Range:=Sheet.Range[Sheet.cells[4,2].Address+':' +Sheet.cells[Row-1,CurCol+1].Address]; Range.Borders.LineStyle:=1; Range.Font.Name:='宋体'; //设置字体和大小 Range.Font.Size:=11; Sheet.Cells.Columns.AutoFit; //自动调整列宽 Excel.visible:=true; { try Sheet.PrintPreView; finally Excel.quit; end; } finally FrmWait.Free; Dataset.EnableControls; end; end;
excelapp.activeworkbook.saveas;
好像不行
procedure ExportToExcel(Dataset:TDataset);
var
Range,WorkBook,Sheet,Excel:variant;
CurCol,col,row:integer;
FrmWait:TFrmWait;
begin
Excel:=CreateOleObject('Excel.Application');
FrmWait:=TFrmWait.Create(application);
try
FrmWait.Show;
// Excel.visible:=true;
Application.ProcessMessages;
Excel.DisplayAlerts:=false;
Excel.WorkBooks.Add;
WorkBook:=Excel.WorkBooks[1];
Sheet := WorkBook.WorkSheets[1];
CurCol:=0;
Row:=4; //从第四行,第二列开始输出
for col:=1 to DataSet.FieldCount do //输出标题
if DataSet.Fields[Col-1].Visible then
begin
Sheet.Cells[Row,CurCol+2]:=DataSet.Fields[Col-1].DisplayLabel;
inc(CurCol);
end;
inc(Row); //数据从第五行开始输出 DataSet.DisableControls;
FrmWait.ProgressBar1.Max:=TDataQuery(DataSet).FilterRows;
FrmWait.Label2.Caption:=format('估计用时:%f 秒',[FrmWait.ProgressBar1.Max/40]);
DataSet.First;
while not Dataset.Eof do
begin
CurCol:=0;
for Col:=1 to DataSet.FieldCount do
if DataSet.Fields[Col-1].Visible then
begin
Sheet.Cells[Row,CurCol+2]:=DataSet.Fields[Col-1].DisplayText;
inc(CurCol);
end;
DataSet.Next;
inc(Row);
FrmWait.ProgressBar1.Position:=Row;
FrmWait.Label2.Caption:=format('估计用时:%f 秒',[(FrmWait.ProgressBar1.Max-FrmWait.ProgressBar1.Position)/40]);
if FrmWait.ConFirmQuit then
if YesNoBox('确定要取消当前操作吗?') then
begin
Dataset.EnableControls;
Excel.quit;
exit;
end else FrmWait.ConFirmQuit:=false;
Application.ProcessMessages;
end; Range:=Sheet.Range['1:65536'];
Range.Verticalalignment:= -4108;//Center; //垂直中对齐
//选择画表格线的范围
Range:=Sheet.Range[Sheet.cells[4,2].Address+':'
+Sheet.cells[Row-1,CurCol+1].Address];
Range.Borders.LineStyle:=1;
Range.Font.Name:='宋体'; //设置字体和大小
Range.Font.Size:=11; Sheet.Cells.Columns.AutoFit; //自动调整列宽
Excel.visible:=true;
{ try
Sheet.PrintPreView;
finally
Excel.quit;
end;
}
finally
FrmWait.Free;
Dataset.EnableControls;
end;
end;
应该有类似saveas的简单方法吧?
第二个参数为格式,第三个参数为密码。
第二个参数为格式,第三个参数为密码。
不能直接存为access格式.