zoukankan      html  css  js  c++  java
  • 我写的采用csv格式将数据转换为excel的函数,带有分栏功能_delphi教程

    声明部分
    procedure  DataToExcelCSV(SaveFileName:string;DataSet:TDataSet;ShowCompleteBoX:Boolean=True;GroupCount:integer=1);

    ......
    {------------------------------------------------------}
    {检测findStr是否in mainStr,如果存在则返回True,否则False}
    {------------------------------------------------------}
    function TFun.IsStrInOtherStr(mainStr,FindStr: string): Bool;
    begin
     if strPos(pAnsiChar(mainStr),pAnsichar(FindStr))=nil
     then
       result:=False
     else
       result:=True;
    end;
    -------------------------------------------------------------------------------------
    //lijinhao 2004-4-4
    //采用csv格式..将数据转换为excel.
    //速度非常快,而且具有分栏功能
    //避免了用comobj带来到弊端
    //GroupCount:用于设定分栏数。。默认为1
    //ShowCompleteBoX:boolean;来设定完成是否显示完成提示
    //-------------------------------------------------------------------------------
    procedure  TFun.DataToExcelCSV(SaveFileName:string;DataSet:TDataSet;ShowCompleteBoX:Boolean;GroupCount:integer);
      Function CheckStr(str:string):string;
      begin
        if IsStrInOtherStr(str,,) then str:="+str+";
        result:=str;
      end;
      //===============//
    var
      ExcelFile:TextFile;
      iRecordCount:integer;//记录数
      iFieldCount:integer;//字段数
      i,j,k:integer;
      TempStr:string;
    begin
      try
         if  Not DataSet.Active then DataSet.Open;
         iRecordCount:=DataSet.RecordCount;
         iFieldCount:=DataSet.FieldCount;
         assignFile(ExcelFile,SaveFileName+.csv);
         rewrite(ExcelFile);
         DataSet.First;
         (*--------写字段头------*)
          TempStr:=;
          for K:=0 to iFieldCount-1 do //字段数
          begin
            if TempStr<> then
             TempStr:=TempStr+,+CheckStr(DataSet.Fields[k].FieldName)
            else
             TempStr:=CheckStr(DataSet.Fields[k].FieldName)
          end;(* for K:=1 to FieldCount do*)
          for i:= 1 to GroupCount-1 do  TempStr:=TempStr+,+TempStr;
          writeLn(ExcelFile,TempStr);
          //---------------------------------
         (*写入记录,按分栏数来写*)
         i:=1;
         while i<=round(iRecordCount div GroupCount) do
         begin
           TempStr:=;
           //如:F0 F1 F2 F3 | F0 F1 F2 F3
            for j:=1 to GroupCount do //分栏数
            begin
               if DataSet.Eof then break;
               inc(i);
               for K:=0 to iFieldCount-1 do //字段数
               begin
                //--------------
                 if tempstr<> then
                    TempStr:=TempStr+,+CheckStr(DataSet.Fields[k].AsString)
                 else
                    TempStr:=CheckStr(DataSet.Fields[k].AsString);
                //------------
               end;(* for K:=1 to FieldCount do*)
               DataSet.Next;
            end;(* for j:=1 to GroupCount do*)
            writeLn(ExcelFile,TempStr);
           if DataSet.Eof then break;
        end;//while i<=round(iRecordCount div GroupCount) do
        if ShowCompleteBoX then MessageBox(0,完成DataToExcel的转换!,完成提示:,mb_ok+MB_IconInformation)
     finally
       closeFile(ExcelFile);
     end;
    end;

  • 相关阅读:
    MySql开启GTID和多线程复制功能
    MySQL自增锁等待问题解决
    MySQL超大表如何提高count速度
    MySQL如何计算重要的指标,来确定配置是否正确
    MySQL传输表空间使用方法
    用MySQL的optimizer_trace进行sql调优
    MySQL主从复制读写分离如何提高从库性能-实战
    Mongo创建文档
    Mongo索引
    Mongo开启查询日志
  • 原文地址:https://www.cnblogs.com/hssbsw/p/2798314.html
Copyright © 2011-2022 走看看