红鱼儿

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

TmsFlexcelExports
复制代码
unit TmsFlexcelExports;

interface

Uses
  Windows, System.SysUtils, System.Classes, VCL.FlexCel.Core,
  FlexCel.XlsAdapter, Data.DB;

procedure DataSetToXLS(fName: string; DataSet: TDataSet;
  WorkSheetCount: Integer = 1; ActiveSheet: Integer = 1);
procedure DataSetToCSV(fName: string; DataSet: TDataSet;
  WorkSheetCount: Integer = 1; ActiveSheet: Integer = 1);

implementation

procedure DataSetToXLS(fName: string; DataSet: TDataSet;
  WorkSheetCount: Integer = 1; ActiveSheet: Integer = 1);
var
  ioldrecno, icol, irow: Integer;
  fmt: TFlxFormat;
  fmtDateTime: Integer;
  XLSX: TExcelFile;
begin
  XLSX := TXlsFile.Create(True);
  try
    ioldrecno := DataSet.RecNo;
    if SameText(ExtractFileExt(fName), '.XLSX') then
      XLSX.SupportsXlsx := True;
    XLSX.NewFile(WorkSheetCount, TExcelFileFormat(5));
    // 4 = V2016 3 = V2013  2 = v2010, 1 = v2007, 0 = v2003
    XLSX.ActiveSheet := ActiveSheet;
    fmt := XLSX.GetDefaultFormat;
    fmt.Format := 'yyyy-mm-dd HH:MM:SS AM/PM';
    fmtDateTime := XLSX.AddFormat(fmt);
    irow := 1;
    for icol := 0 to DataSet.FieldCount - 1 do
    begin
      XLSX.SetCellValue(irow, icol + 1, DataSet.Fields[icol].DisplayName);
    end;
    inc(irow);
    DataSet.First;
    while Not DataSet.EOF do
    begin
      for icol := 0 to DataSet.FieldCount - 1 do
      begin
        case DataSet.Fields[icol].DataType of
          ftUnknown, ftString, ftBoolean, ftBCD, ftBytes, ftVarBytes, ftAutoInc,
            ftBlob, ftMemo, ftGraphic, ftFmtMemo, ftParadoxOle, ftDBaseOle,
            ftTypedBinary, ftCursor, ftFixedChar, ftWideString, ftADT, ftArray,
            ftReference, ftDataSet, ftOraBlob, ftOraClob, ftVariant,
            ftInterface, ftIDispatch, ftGuid, ftFMTBcd, ftFixedWideChar,
            ftWideMemo, ftOraInterval, ftConnection, ftParams, ftStream,
            ftTimeStampOffset, ftObject:
            begin
              XLSX.SetCellValue(irow, icol + 1, DataSet.Fields[icol].AsString);
            end;
          ftSmallint, ftInteger, ftWord, ftLargeint, ftLongWord, ftShortint,
            ftByte, ftSingle:
            begin
              XLSX.SetCellValue(irow, icol + 1, DataSet.Fields[icol].AsInteger);
            end;
          ftDate, ftTime, ftDateTime, ftOraTimeStamp, ftTimeStamp:
            begin
              XLSX.SetCellValue(irow, icol + 1,
                DataSet.Fields[icol].AsDateTime);
              XLSX.SetCellFormat(irow, icol + 1, fmtDateTime);
            end;
          ftExtended, ftFloat, ftCurrency:
            begin
              XLSX.SetCellValue(irow, icol + 1, DataSet.Fields[icol].AsFloat);
            end;
        end;
      end;
      inc(irow);
      DataSet.Next;
    end;
    DataSet.RecNo := ioldrecno;
    XLSX.Save(fName);
  finally
    XLSX.Free;
  end;

end;

procedure DataSetToCSV(fName: string; DataSet: TDataSet;
  WorkSheetCount: Integer = 1; ActiveSheet: Integer = 1);
var
  ioldrecno, icol, irow: Integer;
  fmt: TFlxFormat;
  fmtDateTime: Integer;
  XLSX: TExcelFile;
begin
  XLSX := TXlsFile.Create(True);
  try
    ioldrecno := DataSet.RecNo;
    if SameText(ExtractFileExt(fName), '.XLSX') then
      XLSX.SupportsXlsx := True;
    XLSX.NewFile(WorkSheetCount, TExcelFileFormat(5));
    // 4 = V2016 3 = V2013  2 = v2010, 1 = v2007, 0 = v2003
    XLSX.ActiveSheet := ActiveSheet;
    fmt := XLSX.GetDefaultFormat;
    fmt.Format := 'yyyy-mm-dd HH:MM:SS AM/PM';
    fmtDateTime := XLSX.AddFormat(fmt);
    irow := 1;
    for icol := 0 to DataSet.FieldCount - 1 do
    begin
      XLSX.SetCellValue(irow, icol + 1, DataSet.Fields[icol].DisplayName);
    end;
    inc(irow);
    DataSet.First;
    while Not DataSet.EOF do
    begin
      for icol := 0 to DataSet.FieldCount - 1 do
      begin
        case DataSet.Fields[icol].DataType of
          ftUnknown, ftString, ftBoolean, ftBCD, ftBytes, ftVarBytes, ftAutoInc,
            ftBlob, ftMemo, ftGraphic, ftFmtMemo, ftParadoxOle, ftDBaseOle,
            ftTypedBinary, ftCursor, ftFixedChar, ftWideString, ftADT, ftArray,
            ftReference, ftDataSet, ftOraBlob, ftOraClob, ftVariant,
            ftInterface, ftIDispatch, ftGuid, ftFMTBcd, ftFixedWideChar,
            ftWideMemo, ftOraInterval, ftConnection, ftParams, ftStream,
            ftTimeStampOffset, ftObject:
            begin
              XLSX.SetCellValue(irow, icol + 1, DataSet.Fields[icol].AsString);
            end;
          ftSmallint, ftInteger, ftWord, ftLargeint, ftLongWord, ftShortint,
            ftByte, ftSingle:
            begin
              XLSX.SetCellValue(irow, icol + 1, DataSet.Fields[icol].AsInteger);
            end;
          ftDate, ftTime, ftDateTime, ftOraTimeStamp, ftTimeStamp:
            begin
              XLSX.SetCellValue(irow, icol + 1,
                DataSet.Fields[icol].AsDateTime);
              XLSX.SetCellFormat(irow, icol + 1, fmtDateTime);
            end;
          ftExtended, ftFloat, ftCurrency:
            begin
              XLSX.SetCellValue(irow, icol + 1, DataSet.Fields[icol].AsFloat);
            end;
        end;
      end;
      inc(irow);
      DataSet.Next;
    end;
    DataSet.RecNo := ioldrecno;
    XLSX.Save(fName, TFileFormats.Text, ',', TEncoding.Unicode);
    // XLSX.Save(fName);
  finally
    XLSX.Free;
  end;

end;

end.
复制代码

 

posted on   红鱼儿  阅读(283)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2021-12-12 uniGUI为TreeGrid定制Mask
点击右上角即可分享
微信分享提示