网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Delphi
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.在delphi中使用xml文档有两种方法.
.Delphi&BCB一线程序员开.
.在TDBGrid控件中为作修改过的记录.
.代码示例:你是真的对Delphi很了解.
.DELPHI实现activex控件的限制.
.Delphi7对XML的支持分析.
.Delphi中使用资源文件.
.两个delphi下遍历指定目录下指定.
.从数据库绘制MapX地图.
.双鼠标的介绍.
.在Delphi中实现任意形状的窗体.
.Delphi编码标准——组件命名.
.Windows2000系统进程总列表(手工.
.如何在数据中能加载.JPG格式的图.
.通过原代码学习TComponent类的机.
.字符画软件的四个关键技术.
.对Delphi控件的一点改良(三).
.动态更新DBGrid的颜色.
.Delphi中RichEdit的奥妙.
.支持多线程的日志类,可以在线程.

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

发表日期:2006-2-4


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

上一篇:试题库开发中非文本数据的处理 人气:4370
下一篇:快速导出数据到Excel(三):利用Excel内置功能 人气:4919
浏览全部Delphi的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐