| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 | unit stgGclExcelExport;interfaceuses  Classes, OExport, OExport_Vcl, OExport_VclForms, stgGatherGclDm, sdDB,  stgGatherGclCacheData, Graphics;type  TstgGclExcelExport = class  private    FTempFile: string;    FGatherData: TstgGatherGclData;    FOExport: TOExport;    FOExportor: TOCustomExporter;  protected    function AddHeadCell(ARow: TExportRow; const AHead: string; AWidth: Integer): TExportCellString;    function GetExportor(const AFileType: string): TOCustomExporter;    procedure SaveFile(const AFileName: string);    procedure BeforeExport;    procedure AfterExport;  public    constructor Create(AGatherData: TstgGatherGclData);    property GatherData: TstgGatherData read FGatherData;    property OExport: TOExport read FOExport;  end;  TstgGatherGclExcelExport = class(TstgGclExcelExport)  private    procedure InitSheet(ASheet: TExportWorkSheet);    procedure ExportGclToSheet(AGcl: TstgGatherGcl; ASheet: TExportWorkSheet);    procedure ExportGatherToSheet(ASheet: TExportWorkSheet);  public    procedure ExportGather(const AFileName: string);  end;implementationuses SysUtils, UtilMethods, ZhAPI;{ TstgGclExcelExport }function TstgGclExcelExport.AddHeadCell(ARow: TExportRow; const AHead: string;  AWidth: Integer): TExportCellString;begin  Result := ARow.AddCellString(AHead);  Result.SetAlignment(cahCenter);  Result.SetVAlignment(cavCenter);  Result.Font.Name := '黑体';  Result.Font.Size := 10;  Result.Width := AWidth;end;procedure TstgGclExcelExport.AfterExport;begin  FOExport.Free;  if Assigned(FOExportor) then    FOExportor.Free;  if FileExists(FTempFile) then    DeleteFile(FTempFile);end;procedure TstgGclExcelExport.BeforeExport;begin  FOExport := TOExport.Create;  FOExport.UseProgress := False;  FTempFile := GetTempFileName;end;constructor TstgGclExcelExport.Create(AGatherData: TstgGatherData);begin  FGatherData := AGatherData;end;function TstgGclExcelExport.GetExportor(  const AFileType: string): TOCustomExporter;begin  if SameText(AFileType, '.xls') then    FOExportor := TOCustomExporterXLS.Create  else //if SameText(AFileType, '.xlsx') then    FOExportor := TOCustomExporterXLSX.Create;end;procedure TstgGclExcelExport.SaveFile(const AFileName: string);begin  FOExport.SaveToFile(FTempFile, FOExportor);  if not FileExists(AFileName) or QuestMessage('存在同名文件,是否替换?') then    CopyFileOrFolder(FTempFile, AFileName);end;{ TstgGatherGclExcelExport }procedure TstgGatherGclExcelExport.ExportGather(const AFileName: string);begin  BeforeExport;  try    GetExportor(ExtractFileExt(AFileName));    ExportGatherToSheet(OExport.AddWorkSheet('分包数据汇总'));    SaveFile(AFileName);  finally    AfterExport;  end;end;procedure TstgGatherGclExcelExport.ExportGatherToSheet(  ASheet: TExportWorkSheet);var  i: Integer;begin  InitSheet(ASheet);  try    for (i := 0 to FGatherData.GatherGclCount - 1) do      ExportGclToSheet(FGatherData.GatherGcl[i], ASheet);  finally    vTree.Free;  end;end;procedure TstgGatherGclExcelExport.ExportGclToSheet(AGcl: TstgGatherGcl;  ASheet: TExportWorkSheet);  procedure AddCellString(ARow: TExportRow; const AStr: string; AColor: TColor);  var    vCell: TExportCellString;  begin    vCell := ARow.AddCellString(AStr);    vCell.Font.Color := AColor;  end;  procedure AddCellNumber(ARow: TExportRow; const ANum: Double; AColor: TColor);  var    vCell: TExportCellNumber;  begin    vCell := ARow.AddCellNumber(ANum);    vCell.Font.Color := AColor;    vCell.EmptyIfZero := True;  end;var  vColor: TColor;  vRow: TExportRow;  vCell: TExportCellNumber;begin  if not Assigned(ANode) then Exit;  vColor := clWindowText;  vRow := ASheet.AddRow;  AddCellString(vRow, AGcl.Rec.ValueByName('B_Code').AsString, vColor);  AddCellString(vRow, AGcl.Rec.ValueByName('Name').AsString, vColor);  AddCellString(vRow, AGcl.Rec.ValueByName('Units').AsString, vColor);  AddCellNumber(vRow, AGcl.Rec.ValueByName('Price').AsFloat, vColor);  AddCellNumber(vRow, AGcl.Rec.ValueByName('DealQuantity').AsFloat, vColor);  AddCellNumber(vRow, AGcl.Rec.ValueByName('QcQuantity').AsFloat, vColor);end;procedure TstgGatherGclExcelExport.InitSheet(ASheet: TExportWorkSheet);var  vRow: TExportRow;begin  vRow := ASheet.AddRow;  AddHeadCell(vRow, '清单编号', 120);  AddHeadCell(vRow, '名称', 250);  AddHeadCell(vRow, '单位', 60);  AddHeadCell(vRow, '单价', 80);  AddHeadCell(vRow, '合同计量', 100);  AddHeadCell(vRow, '数量变更计量', 100);end;end.
 |