DBGrid中的数据导出Excel文件,有一列数据为varchar型,前面有0的数据,导出后就自动把0去掉了,(比如说有个数据为00000001,导出的数据就变成1了),请各位高手指点!!

解决方案 »

  1.   

    导出数据时把Excel对应的列设置为文本格式就行了..
    数据为00000001
      

  2.   

    PrintDBGridEh1.Title.CenterText.Text := '记  录';
        PrintDBGridEh1.Title.Font.Size := 16;
        PrintDBGridEh1.ExportToXLS('c:\');我用到的是PrintDBGridEh1控件,请问 78hgdong(赤脚) 大哥怎样将Excel对应的列设置为文本格式呢????
      

  3.   

    gxgyj(杰克逊):关键是前面不让加'啊,只能是00000001
      

  4.   

    用PrintDBGridEh1控件导出的话,只能手工去Excel对应的列设置为文本格式了.
    点击Excel对应的列,右键-->设置单元格格式-->文本
      

  5.   

    加上这句:
    Sheet1.Columns[i].NumberFormat:='@'; //////////把某列保存成文本格式,就不会出现去掉前面的0的现象比如第一列是货号,有001,002等等,加上
    Sheet1.Columns[1].NumberFormat:='@'; 到出excel后还能保持原样001,002 否则excel自动把它当成数字处理,会保存成1,2
      

  6.   

    回复人: gxgyj(杰克逊) ( ) 信誉:94 -------
    此法正确,别的方法没试过
      

  7.   

    gxgyj(杰克逊) 和lovendII(戒情人) 的方法,我都试过了,可以这么做,谢谢啦!另外如果用到PrintDBGridEh1控件,该如何解决呢
      

  8.   

    用什么办法可以设置单元格的宽度,
    xls.workbooks[1].sheets[1].Columns[2].Width:=150;
    这样好象不行
      

  9.   

    设置指定列的宽度(单位:字符个数),以第一列为例:ExcelApp.ActiveSheet.Columns[1].ColumnsWidth := 5;8) 设置指定行的高度(单位:磅)(1磅=0.035厘米),以第二行为例:ExcelApp.ActiveSheet.Rows[2].RowHeight := 1/0.035; // 1厘米
      

  10.   

    xls.workbooks[1].ActiveSheet.Columns[2].ColumnsWidth:=5;
    这样我试过了,报错
      

  11.   

    ExcelApp.ActiveSheet.Columns[1].ColumnsWidth := 5;这里的ColumnsWidth 多了一个s,应该是ColumnWidth
      

  12.   

    我一般倒数据去excel是使用ExcelQueryTable控件,这个在Server面板里面.
    1.首先我是把DBGrid里面的数据先写成一个文本,每行一个记录,每个字段之间使用Tab分割
      while not DBGrid.DataSet.eof do
      begin
      ...............
      end;
    2.接着,我要连接Excel
      ExcelApplication1.Connect;
      ExcelApplication1.Visible[0]:=True;
      ExcelApplication1.Workbooks.Add(NULL,0);
      ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks[ExcelApplication1.Workbooks.Count]);
      ExcelWorksheet1.ConnectTo(ExcelWorkbook1.Sheets[1] as _WorkSheet);
    3.然后,我要使用ExcelTableQuery控件直接把文本倒入到excel里面来
      ExcelWorkSheet1.QueryTables.Add('TEXT;'+'C:\tmp2.txt',ExcelWorkSheet1.Range['A1','A1'],EmptyParam);
      ExcelQueryTable1.ConnectTo(ExcelWorkSheet1.QueryTables[1] as _QueryTable);
      ExcelQueryTable1.TextFileColumnDataTypes:=Text2Excel_Format;
      ExcelQueryTable1.Refresh;
    注意:(1)'C:\tmp2.txt'就是我倒的文件
         (2)ExcelQueryTable1.TextFileColumnDataTypes这里就是指定的文本格式,主要是区分列是文本还是数字,只要指定了为文本,就不会消除前面的0了.
       Text2Excel_Format是一个整数数组,类似于(1,2,1,2).指定为1自动判断是文本还是数字,指定为2则一定是文本.
       为了获得,我这里写了一个函数
    function TComm.InitFormatA(DataSet: TDataSet): OleVariant;
    var i:integer;
        A:Variant;
    begin
      A:=VarArrayCreate([0,DataSet.Fields.Count-1],varVariant);
      for i:=0 to DataSet.FieldCount-1 do
        if DataSet.Fields[i].DataType=ftString then A[i]:=2 else A[i]:=1;
      InitFormatA:=A;
    end;
      

  13.   

    我看不少朋友都是连接了excel以后一行一行往excel里面倒入,这样非常没有效率,我一般使用ExcelTableQuery控件,批量倒入,只要设定好了倒入的格式,倒入速度可以提高几十倍.
      

  14.   

    采用了lovendII(戒情人) 的办法