导出到excel,他的单元格格式默认是 常规
这样导致我的一些数据 如:000001变成了1,常窜数字都被用科学技术法表示了为了保持数据的原样 就要把excel单元格格式在导出时改成文本
我是用以下代码作导出的 不知能否添加代码实现上述效果我的原代码如下:
procedure Tcardform.SpeedButton1Click(Sender: TObject);
var
xlapp:texcelapplication;
xlbook:texcelworkbook;
xlsheet:texcelworksheet;
i,row:integer;begin  xlapp:=texcelapplication.Create(self);
  xlbook:=texcelworkbook.Create(self);
  xlsheet:=texcelworksheet.Create(self);
  try
    xlapp.ConnectKind:=cknewinstance;
    xlapp.Visible[1]:=true;
    try
    xlapp.Connect;
    except
    application.MessageBox('没有安装EXCEL','提示',mb_ok or mb_iconstop);
    exit;
    end;
 xlapp.Workbooks.Add(emptyparam,0);
 xlapp.Caption:='文件导出';
 xlbook.ConnectTo(xlapp.Workbooks[1]);
 xlsheet.ConnectTo(xlapp.Worksheets[1] as _worksheet); with dm.adoquery2 do
 begin close;
 sql.Clear;
 sql.Add('select * from card');
 open;
 first;
 end;
 dm.adoquery2.First; for i:=0 to dm.adoquery2.Fields.Count-1 do
 xlsheet.Cells.Item[2,i+1]:=dbgrid1.Columns.Items[i].Title.Caption; row:=0;
 while  not dm.adoquery2.Eof do
 begin
 for i:=0 to dm.adoquery2.Fields.Count-1 do
 begin
 xlsheet.Cells.Item[row+3,i+1]:=dm.adoquery2.Fields[i].AsString;
 end;
 dm.adoquery2.Next;
 inc(row);
 end;
 xlapp.Disconnect;
 finally
 xlapp.Free;
 xlbook.Free;
 xlsheet.Free;
 end;
end;

解决方案 »

  1.   

    xlsheet.Cells.Item[row+3,i+1].NumberFormatLocal:='@';
    xlsheet.Cells.Item[row+3,i+1]:=dm.adoquery2.Fields[i].AsString;
    出自于Sub 宏1()
    '
    ' 宏1 Macro
    ' Simon Lee 记录的宏 2006-10-24
    '
    '
        Range("A2").NumberFormatLocal = "@"
    End Sub
      

  2.   

    while  not dm.adoquery2.Eof do
    begin
      for i:=0 to dm.adoquery2.Fields.Count-1 do
      begin
        if (adoquery2.Fields[i].DataType = ftString) or (adoquery2.Fields[i].DataType = ftWindString) then
          xlsheet.Cells.Item[row+3,i+1]:= '''' + dm.adoquery2.Fields[i].AsString
        else
          xlsheet.Cells.Item[row+3,i+1]:=dm.adoquery2.Fields[i].AsString;
      end;
      dm.adoquery2.Next;
      inc(row);
    end;
      

  3.   

    while  not dm.adoquery2.Eof do
    begin
      for i:=0 to dm.adoquery2.Fields.Count-1 do
      begin
        if adoquery2.Fields[i].DataType in [ftString, ftWideString] then
          xlsheet.Cells.Item[row+3,i+1]:= '''' + dm.adoquery2.Fields[i].AsString
        else
          xlsheet.Cells.Item[row+3,i+1]:=dm.adoquery2.Fields[i].AsString;
      end;
      dm.adoquery2.Next;
      inc(row);
    end;
      

  4.   

    cangwu_lee(小橙子)的 用了, 效果出来了gobiz(拔剑容易收剑难)使用后 无法识别 ftstring  ,还要修改什么吗
      

  5.   

    在 USES 单元,加上 DB,就可以识别 ftstring了。