`
宋科明
  • 浏览: 101655 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

快速导出数据到Excel(一):利用剪贴板

阅读更多

快速导出数据到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;

 

分享到:
评论

相关推荐

    Office自动化编程实例锦集使用剪贴板导出Excel文件

    5. 将数据复制到剪贴板:在你的应用程序中处理数据,然后将其复制到剪贴板。例如,如果数据存储在字符串数组中,可以使用`Clipboard::SetText`方法。 6. 使用剪贴板数据填充单元格:在Excel中,通过`Paste`方法将...

    delphi获取处理剪贴板中Excel中的数据,封装成自定义的数据集

    剪贴板是操作系统提供的一种临时存储区域,用户可以将数据复制到剪贴板,然后在不同的应用程序之间粘贴数据。在Excel中,用户可以通过复制(Ctrl+C)表格数据到剪贴板,然后在其他支持剪贴板操作的应用程序中粘贴...

    【原创】C#导出数据到EXCEL方法谈(附实例源码和超级无敌详细讲解)

    4.利用系统剪贴板写入EXCEL 好了,我想这些方法已经足够完成我们要实现的功能了,方法不在多,在精,不是么?以上4中方法都可以实现导出EXCEL,方法1为最基础的方法,意思就是效率可能不是太高,当遇到数据量过大...

    Delphi 导出数据至Excel的7种方法

    5. **粘贴数据**:将字符串列表的内容复制到剪贴板,然后使用`Paste`方法粘贴到Excel工作表中。 6. **保存文件**:调用`SaveAs`方法保存工作簿。 7. **清理资源**:关闭Excel应用并释放相关资源。 **注意事项**: -...

    Keil数据导出分析

    本话题聚焦于如何从Keil环境中导出数据,并利用Excel进行进一步的分析。 首先,Keil在仿真运行过程中会收集各种内存信息,包括变量的值、堆栈状态、内存映像等。这些信息对于理解和调试程序至关重要。当你需要分析...

    Delphi 导出为Excel的函数代码

    4. **利用剪贴板进行数据传输**: 虽然直接的数据流传输更为高效,但此代码利用了 Windows 的剪贴板机制,将整个数据集复制到剪贴板,然后再粘贴到 Excel 工作表中。这是处理大量数据时的一个简单但有效的策略。 5...

    delphi dbgrid 导出Excel表

    #### 方法一:利用剪贴板与 COM 对象交互 这种方法适用于安装了 Microsoft Office 的计算机。具体步骤如下: 1. **准备数据字符串**: - 首先,禁用数据集的控制功能。 - 使用循环遍历数据集中的所有字段,将其...

    利用js导出Web页面内容到Word、Excel

    这里选择了ID为`PrintA`的表格元素,并将其内容复制到剪贴板中。最后,在Excel的工作表中粘贴这些内容,并显示Excel窗口。 2. **导出表单单元格内容到Excel** ```javascript function CellAreaExcel() { var ...

    vb excel与access相互导入导出的源码

    - **从Excel到Access**:除了直接读取Excel数据并插入记录集,还可以先将Excel数据复制到剪贴板,然后在Access中使用`DoCmd.RunMacro`调用一个宏,该宏会从剪贴板粘贴数据到Access表中。 - **从Access到Excel**:...

Global site tag (gtag.js) - Google Analytics