要一个cell,一个cell的循环读写,设置格式,如果是100行数据以内还可以接受,如果是上千行那种就麻烦了。太慢了几乎要半个小时。各位大侠看看有什么好办法没有。

解决方案 »

  1.   

    有直接读写Excel的控件,忆君表格不错。
      

  2.   

    用dxdbgrid或dbgrideh,直接导出excel,很快
      

  3.   

    如果是连接数据库,可以直接用SQL语句导出到Excel,以前见到过,不过好像是excel2.0的
      

  4.   

    建一个Excel模板,然后对模板读写,就不必设置格式了
      

  5.   


    var
      MsExcel,MsWorkBook,MsSheet,vTest,Selection:Variant;
      caFileName:STRING;
      i:integer;
    begin
      ADOQuery1.ConnectionString:=ConnString;  //连接DB的连接字符串
      ADOQuery1.SQL.Clear;
      ADOQuery1.SQL.Add(sSQL);  SaveDialog1.InitialDir:=ExtractFilePath('C:\');
      SaveDialog1.DefaultExt:='XLS';
      SaveDialog1.Filter:='ALL Files(*.xls)|*.xls';  if SaveDialog1.Execute then  //指定Excel的存放位置
      Begin
        caFileName:=SaveDialog1.FileName;
        Try
          MsExcel:=CreateOleObject('Excel.Application');
          IF FileEXISTS(caFileName) Then
            MsWorkBook:= MsExcel.WorkBooks.Open(caFileName)
          Else
            MsWorkBook:=MsExcel.WorkBooks.Add;      MsExcel.Worksheets[1].Activate; //
          MsSheet:=MsExcel.Worksheets[1];      Selection:=MsSheet.Cells;
        Except
          MessageDlg('Can''t Open Excel!!', mtWarning, [mbOK], 0);
          Exit;
        End;
      end
      Else
      Begin
        Exit;
      End;  Try
        if ADOQuery1.Active  then
          ADOQuery1.Requery
        else
          ADOQuery1.Open;
           
        vTest:=MsSheet.QueryTables.Add(Excel.Recordset ,MsSheet.Range['A1']);
        vTest.RefreshStyle:= 2 ;
        vTest.Refresh;    MsWorkBook.SaveAs(caFileName);
        MsExcel.Visible:=True;
        Selection:=Null;
        MsSheet:=Null;
        MsWorkBook:=Null;
        MsExcel:=Null;
      except
        Selection:=Null;
        MsSheet:=Null;
        MsWorkBook:=Null;
        MsExcel:=Null;
      end;  
      

  6.   

      可以直接保存为  csv  的表格文件
      cxDbgrid\dxDbgrid  都可以直接导出