快速导出数据到Excel(一):利用剪贴板
来源:互联网 发布:大疆无人机竞争力知乎 编辑:程序博客网 时间:2024/05/20 14:23
将数据导出到Excel的方法有多种,速度有快慢之分,我用过三种方法,速度都比较快,下面的一种是通过剪贴板进行,不过在个别W2K以上的系统,由于字符集编码不同,中文内容导出到Excel后可能变成乱码。
//定义BlockInput函数
function BlockInput (fBlockInput : boolean) : DWord; stdcall; external 'user32.DLL';
//显示进度条面板
procedure ShowProgress(Min, Max, Position: integer);
begin
//pnlProgress: TPanel、ProgressBar1: TProgressBar
pnlProgress.Left := (ClientWidth - pnlProgress.Width) div 2;
ProgressBar1.Min := Min;
ProgressBar1.Max := Max;
ProgressBar1.Position := Position;
pnlProgress.Visible := true;
pnlProgress.Update;
end;
//将数据库数据添加到DataList
function GetDataList(DataList: TStringList): Boolean;
var
S: string;
i: integer;
begin
Result := true;
DataList.Clear;
try try
DataList.Add('这是标题');
ProgressBar1.StepIt;
ADOQuery1.DisableControls;
with ADOQuery1 do begin
First;
S := '';
for i:=0 to FieldCount-1 do
if Fields[i].Visible then
S := S + Fields[i].DisplayLabel + #9; //先导出字段名,用制表符分开
DataList.Add(S);
ProgressBar1.StepIt;
While Not Eof do begin
S := '';
for i:=0 to FieldCount-1 do
if Fields[i].Visible then
S := S + Fields[i].DisplayText + #9;//导出数据显示内容
DataList.Add(S);
ProgressBar1.StepIt;
Application.ProcessMessages;
Next;
end;
end;
except
Result := false;
end;
finally
ADOQuery1.EnableControls;
end;
end;
function ExportByClipboard: Boolean;
var
List: TStringList;
FileName: string;
ASheet: Variant;
begin
ShowProgress(0, ADOQuery1.RecordCount+3, 0);
Result := true;
FileName := 'C:/abc.xls';
Excel.Connect; //Excel: TExcelApplication控件
try try
Excel.DisplayAlerts[0] := false;
Excel.Visible[0] := false;
Excel.Caption := 'XXXXX导出(Excel)';
Excel.Workbooks.Add(xlWBATWorksheet, 0);
ASheet := Excel.Worksheets.Item[1];
//设定默认格式
Excel.Cells.Font.Name := '宋体';
Excel.Cells.Font.Size := 10;
Excel.Cells.VerticalAlignment := 2;
//设定标题格式
Excel.Range['A1', 'Z1'].HorizontalAlignment := 7;
Excel.Range['A1', 'Z1'].Font.Size := 16;
Excel.Range['A1', 'Z1'].RowHeight := 22;
Excel.Range['A2', 'Z2'].HorizontalAlignment := 3;
Excel.Range['A2', 'Z2'].Font.Bold := true;
List := TStringList.Create;
try try
if GetDataList(List) then begin
//锁定计算机并将数据粘到Excel里
BlockInput(true);
Clipboard.AsText := List.Text;
ASheet.Paste;
Clipboard.Clear;
BlockInput(false);
ProgressBar1.StepIt;
end;
finally
List.Free;
end;
except
Result := false;
pnlProgress.Visible := false;
Exit;
end;
ProgressBar1.StepIt;
Excel.Workbooks.Item[1].SaveCopyAs(FileName, 0);
Excel.Workbooks.Item[1].Close(false, FileName, 0, 0);
finally
Excel.Quit;
Excel.Disconnect;
end;
except
Result := false;
pnlProgress.Visible := false;
Exit;
end;
ProgressBar1.Position := ProgressBar1.Max;
MessageBox(Handle, PChar('数据成功导出到' + FileName), '导出数据', MB_ICONINFORMATION or MB_OK);
pnlProgress.Visible := false;
end;
- 快速导出数据到Excel(一):利用剪贴板
- Delhpi利用剪贴板快速导出(复制)数据到excel
- 利用剪贴板实现高速导出数据到Excel
- 利用剪贴板实现高速导出数据到Excel
- 利用剪贴板实现高速导出数据到Excel
- 快速导出数据到Excel(二):利用临时文件
- 快速导出数据到Excel(三):利用Excel内置功能
- 快速导出数据到Excel(三):利用Excel内置功能
- C# 利用剪贴板快速导入 datatable/dataset 的数据到 Excel
- VB.NET 快速导出数据到Excel
- 利用模板导出数据到Excel中
- 利用PHPExcel导出数据到excel
- java利用poi导出数据到excel
- 利用PHPExcel导出数据到excel
- 利用poi数据导出到excel demo
- jsp页面查询的数据导出到excel(一)
- JavaScript导出table数据到Excel<一>
- 数据导出到Excel
- Java性能优化技巧集锦(J2EE篇)
- 软件测试自动化实践
- 已经搞到原书的代码了
- 在dreamweaver中编写asp代码的一点小发现
- LINUX内核编译(ZT)
- 快速导出数据到Excel(一):利用剪贴板
- 软件测试过程的持续完善
- 给初学者谈谈心(C/C++/asm)(聊天记录)
- 软件测试组织与方法
- 大家看看一道面试题,我感觉有错误
- 在ASP.NET中跟踪和恢复大文件下载
- 今天终于知道了陕西十大怪是哪十大!
- 如何解决js菜单被flash覆盖
- TThread.Synchronize同步方法及弊端