WEB开发网
开发学院软件开发Delphi 我写的采用csv格式将数据转换为excel的函数,带有... 阅读

我写的采用csv格式将数据转换为excel的函数,带有分栏功能

 2006-02-04 13:45:14 来源:WEB开发网   
核心提示:声明部分 PRocedure DataToExcelCSV(SaveFileName:string;DataSet:TDataSet;ShowCompleteBoX:Boolean=True;GroupCount:integer=1);......{--}{检测findStr是否in mainStr,如果存在则返回T

声明部分
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;

Tags:采用 csv 格式

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接