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

宝持威笑

宝持威笑

2016-02-19 19:35

在这个颜值当道,屌丝闪边的时代,拼不过颜值拼内涵,只有知识丰富才能提升一个人的内在气质和修养,所谓人丑就要多学习,今天图老师给大家分享快速导出数据到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;

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

  //将数据库数据添加到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;

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

      ProgressBar1.Position := ProgressBar1.Max;
      MessageBox(Handle, PChar('数据成功导出到' + FileName), '导出数据', MB_ICONINFORMATION or MB_OK);
      pnlProgress.Visible := false;
  end;
  

展开更多 50%)
分享

猜你喜欢

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

编程语言 网络编程
快速导出数据到Excel(一):利用剪贴板

利用剪贴板共享数据

autocad教程
利用剪贴板共享数据

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

利用剪贴板共享数据教程

autocad教程
利用剪贴板共享数据教程

AutoCad利用剪贴板共享数据教程

autocad教程
AutoCad利用剪贴板共享数据教程

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

剪贴板和动态数据交换(一)

Delphi
剪贴板和动态数据交换(一)

快速导出数据到Excel(三):利用Excel内置功能

编程语言 网络编程
快速导出数据到Excel(三):利用Excel内置功能

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

CSS盒子模式详解三

CSS盒子模式详解三

得到内网可用的SqlServer 及某数据库下的表及其

得到内网可用的SqlServer 及某数据库下的表及其
下拉加载更多内容 ↓