delphi TMS FlexCel 导出进度条

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;
posted @ 2022-11-05 12:09  txgh  阅读(153)  评论(0编辑  收藏  举报