快速导出数据到Excel(一):利用剪贴板
将数据导出到Excel的方法有多种,速度有快慢之分,我用过三种方法,速度都比较快,下面的一种是通过剪贴板进行,不过在个别W2K以上的系统,由于字符集编码不同,中文内容导出到Excel后可能变成乱码。
//显示进度条面板
procedure ShowProgress(Min, Max, Position: integer);
begin
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;
分享到:
相关推荐
5. 将数据复制到剪贴板:在你的应用程序中处理数据,然后将其复制到剪贴板。例如,如果数据存储在字符串数组中,可以使用`Clipboard::SetText`方法。 6. 使用剪贴板数据填充单元格:在Excel中,通过`Paste`方法将...
剪贴板是操作系统提供的一种临时存储区域,用户可以将数据复制到剪贴板,然后在不同的应用程序之间粘贴数据。在Excel中,用户可以通过复制(Ctrl+C)表格数据到剪贴板,然后在其他支持剪贴板操作的应用程序中粘贴...
4.利用系统剪贴板写入EXCEL 好了,我想这些方法已经足够完成我们要实现的功能了,方法不在多,在精,不是么?以上4中方法都可以实现导出EXCEL,方法1为最基础的方法,意思就是效率可能不是太高,当遇到数据量过大...
5. **粘贴数据**:将字符串列表的内容复制到剪贴板,然后使用`Paste`方法粘贴到Excel工作表中。 6. **保存文件**:调用`SaveAs`方法保存工作簿。 7. **清理资源**:关闭Excel应用并释放相关资源。 **注意事项**: -...
本话题聚焦于如何从Keil环境中导出数据,并利用Excel进行进一步的分析。 首先,Keil在仿真运行过程中会收集各种内存信息,包括变量的值、堆栈状态、内存映像等。这些信息对于理解和调试程序至关重要。当你需要分析...
4. **利用剪贴板进行数据传输**: 虽然直接的数据流传输更为高效,但此代码利用了 Windows 的剪贴板机制,将整个数据集复制到剪贴板,然后再粘贴到 Excel 工作表中。这是处理大量数据时的一个简单但有效的策略。 5...
#### 方法一:利用剪贴板与 COM 对象交互 这种方法适用于安装了 Microsoft Office 的计算机。具体步骤如下: 1. **准备数据字符串**: - 首先,禁用数据集的控制功能。 - 使用循环遍历数据集中的所有字段,将其...
这里选择了ID为`PrintA`的表格元素,并将其内容复制到剪贴板中。最后,在Excel的工作表中粘贴这些内容,并显示Excel窗口。 2. **导出表单单元格内容到Excel** ```javascript function CellAreaExcel() { var ...
- **从Excel到Access**:除了直接读取Excel数据并插入记录集,还可以先将Excel数据复制到剪贴板,然后在Access中使用`DoCmd.RunMacro`调用一个宏,该宏会从剪贴板粘贴数据到Access表中。 - **从Access到Excel**:...