首页 > 其他分享 >delphi TMS FlexCel 导出进度条

delphi TMS FlexCel 导出进度条

时间:2022-11-05 12:22:20浏览次数:92  
标签:TMS 进度条 FlexCel delphi 导出 Prog Pdf Xls

TMS FlexCel 导出进度条

属性和方法

TFlexCelPdfExport.Progress

property Progress: TFlexCelPdfExportProgress

导出进度。可以从其他线程或AfterGeneratePage 事件访问此变量。

TFlexCelPdfExport.AfterGeneratePage

property AfterGeneratePage: TPageEventHandler

生成每个新页面并且将所有内容写入页面之后触发。 可以使用此事件在页面内容的顶部添加一些文本或图像。

TFlexCelPdfExportProgress.Page

property Page: Integer

正在写入的页面。

TFlexCelPdfExportProgress.TotalPage

property TotalPage: Integer

导出的总页数。

例子

导出工作表进度条处理

在窗体上放置TProgressBar组件ProgressBar1

TForm1private中增加方法PdfAfterGeneratePage

uses VCL.FlexCel.Core, FlexCel.XlsAdapter, FlexCel.Render;

private
  procedure PdfAfterGeneratePage(const sender: TObject; const e: TPageEventArgs);

procedure TForm1.PdfAfterGeneratePage(const sender: TObject; const e: TPageEventArgs);
var
  Prog: TFlexCelPdfExportProgress;
begin
  //获取导出进度
  Prog := (Sender as TFlexCelPdfExport).Progress;
  //显示导出信息(Prog.TotalPage是当前Sheet总页数,Prog.Page是当前Sheet导出页)
  Memo1.Lines.Add('总页数' + Prog.TotalPage.ToString + ' 当前页' + Prog.Page.ToString);
  //根据当前页和总页数处理进度条
  ProgressBar1.Position  := Round(Prog.Page * 100 / Prog.TotalPage);
end;

procedure TForm1.Button24Click(Sender: TObject);
var
  Xls: TXlsFile;
  Pdf: TFlexCelPdfExport;
  Stream: TMemoryStream;
begin
  //读取Excel文件
  Xls := TXlsFile.Create('C:\Users\Administrator\Desktop\ceshi2.xlsx');
  //关联导出的文档
  Pdf := TFlexCelPdfExport.Create(Xls, True);
  //设置导出每页内容后事件,处理进度条的显示
  Pdf.AfterGeneratePage := PdfAfterGeneratePage;
  try
    //设置要导出的工作表
    Xls.ActiveSheetByName := 'Sheet3';
    //导出当前活动的工作表到文件
    Pdf.Export('C:\Users\Administrator\Desktop\ceshi1.pdf');
  finally
    Pdf.Free;
    Xls.Free;
  end;
end;

导出全部工作表进度条处理

在窗体上放置TProgressBar组件ProgressBar1

TForm1private中增加字段FTotalPagesFPage,增加方法PdfAfterGenerateTotalPage

uses VCL.FlexCel.Core, FlexCel.XlsAdapter, FlexCel.Render;

private
  FTotalPages: Integer;
  FPage: Integer;
  procedure PdfAfterGenerateTotalPage(const sender: TObject; const e: TPageEventArgs);

procedure TForm1.PdfAfterGenerateTotalPage(const sender: TObject; const e: TPageEventArgs);
var
  Prog: TFlexCelPdfExportProgress;
begin
  //获取导出进度
  Prog := (Sender as TFlexCelPdfExport).Progress;
  FPage := FPage + 1;
  //显示导出信息(Prog.TotalPage是当前Sheet总页数,Prog.Page是当前Sheet导出页)
  Memo1.Lines.Add('总页数' + FTotalPages.ToString + ' 当前页' + FPage.ToString +
    ' 当前Sheet总页数' + Prog.TotalPage.ToString + ' 当前Sheet导出页' + Prog.Page.ToString);
  //根据当前页和总页数处理进度条
  ProgressBar1.Position  := Round(FPage * 100 / FTotalPages);
end;

procedure TForm1.Button25Click(Sender: TObject);
var
  Xls: TXlsFile;
  Pdf: TFlexCelPdfExport;
  Stream: TMemoryStream;
  I: Integer;
begin
  //读取Excel文件
  Xls := TXlsFile.Create('C:\Users\Administrator\Desktop\ceshi2.xlsx');
  //关联导出的文档
  Pdf := TFlexCelPdfExport.Create(Xls, True);
  //设置导出每页内容后事件,处理进度条的显示
  Pdf.AfterGeneratePage := PdfAfterGenerateTotalPage;
  FPage := 0;
  FTotalPages := 0;
  Stream := TMemoryStream.Create;
  try
    Pdf.BeginExport(Stream);
    //计算总页数
    for I := 1 to Xls.SheetCount do
    begin
      Xls.ActiveSheet := I;
      FTotalPages := FTotalPages + Pdf.TotalPagesInSheet;
    end;
    //导出所有工作表到文件
    for I := 1 to Xls.SheetCount do
    begin
      Xls.ActiveSheet := I;
      Pdf.ExportSheet;
    end;
  finally
    Pdf.EndExport;
    Pdf.Free;
    Xls.Free;
    Stream.Free;
  end;
end;

标签:TMS,进度条,FlexCel,delphi,导出,Prog,Pdf,Xls
From: https://www.cnblogs.com/txgh/p/16859945.html

相关文章

  • delphi11.2和谐安装
    delphi11.2和谐安装delphi11.2和谐起来还是比较麻烦的,如果曾安装过,必须要清除注册表,否则和谐不会成功。和谐以前的版本是不用的。如果没有安装过,当然不用清除注册表。1)删......
  • delphi 11.2 配置Linux 开发环境
    1.rockylinux9 命令行: mvlibpython3.solibpython3.so_  ln-s/usr/lib64/libpython3.9.so.1.0libpython3.so打开防火墙:  命令 firewall-cmd--zon......
  • Delphi XE DataSnap.DSServer[2] TDSServer[2] BroadcastMessage-广播消息
    DelphiXEDataSnap.DSServer[2]TDSServer[2]BroadcastMessage-广播消息向所有客户端回调发送消息。functionTDSServer.BroadcastMessage(constChannelName:string......
  • Delphi XE DataSnap.DSServer[2] TDSServer[1] 介绍
    DelphiXEDataSnap.DSServer[2]TDSServer[1]介绍管理传输和服务器类的创建和生存期。此DataSnap服务器组件管理传输和服务器类的创建和生存期。//管理传输和服......
  • Delphi XE DataSnap.DSServer[1]介绍
    DelphiXEDataSnap.DSServer[1]介绍定义实现DataSnap回调隧道的类、要通过这些隧道发送的项、事件、隧道管理器、提供程序模块适配器、管理传输和服务器类的创建和生存......
  • Delphi获取Unix当前系统时间戳
    procedureTForm1.btn4Click(Sender:TObject); varStr:String; D:tDatetime; a:Double; functionDateTimeToUnixDate(constADate:TDateTime):Longint; c......
  • Delphi XE System.Generics.Collections[1] - 介绍
    DelphiXESystem.Generics.Collections[1]-介绍实现通用容器类以将数据项分组为数组、字典、列表、堆栈、队列等的单元。Package:rtl270.bpl ClassesTArrayCla......
  • delphi TscSplitView控件学习笔记(2)
    效果图:设计图:scSplitView设置:opened:false;openedwidth:150;(按你自己需求)compactwidth:35;(确保只能看到图标即可)设计技巧:compactwidth先设置成全尺......
  • delphi TscSplitView控件学习笔记
    一.先说效果吧,放置的位置不一样,显示出来的效果也不一样 然后效果是这样的:注意位置标记1按钮的位置.当DisplayMode:=scsvmOverlay时,会遮挡TscSplitView......
  • Delphi datasnap如何使用IPv6地址
    今天看到电信公司开始推广使用IPv6我也想着用datasnap中间件也使用IPv6,百度一下都是下面的说法: “有些人说DATASNAP不支持IPv6,只支持IPv4。这是不正确的。DATASNAP默......