uses ComObj;
var ExcelApp: Variant;
    i:integer;
begin
ExcelApp:=CreateOleObject('Excel.Application');
ExcelApp.Visible := false;
ExcelApp.WorkBooks.Add;
ExcelApp.WorkSheets[1].Activate;
ExcelApp.ActiveSheet.Protect(DrawingObjects:=false,Contents:=false,Scenarios:=false);//设置保护
   for i:=1 to ADOStoredProc1.RecordCount do
      begin
       ExcelApp.WorkSheets[1].Cells[i,1].Value:=ADOStoredProc1.FieldByName('通知书编号    ').AsString;
       ADOStoredProc1.Next;
      end;
ExcelApp.ActiveWorkBook.saveas('F:\demo.xls');
ExcelApp.quit;
end;为什么在数据集中的编号'000012345'写到excel中会变成'12345',前面的0全没了,怎样禁止它丢失0? 

解决方案 »

  1.   

    先把赋给一个字符型的变量然后写进EXCEL就可以了
      

  2.   

    如果是Int类型的会自动消掉前面的零的,字符串类型就不会了
    改一下你的数据库编号类型吧
      

  3.   

    uses ComObj;
    {$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    var
      MSExcel:Variant;
      i,j:integer;
    begin
      SaveDialog1.Filter:='*.XLS|*.XLS';
      SaveDialog1.DefaultExt:='XLS';
      if SaveDialog1.Execute then
      begin
        MsExcel:=createOLEobject('excel.application');
        MsExcel.workBooks.add;
        Msexcel.visible:=false;
        with DataSource1.Dataset  do
        begin
          first;
          for i:=0 to fieldcount-1 do
          begin
            Msexcel.cells[1,i+1].value:=fields[i].DisplayLabel ;
          end;
          j:=2;
          while not eof do
          begin
            for i:=0 to fieldcount-1 do
            begin
              Msexcel.cells[j,i+1].numberformat:='@';
              Msexcel.cells[j,i+1].value:=fields[i].AsString ;
            end;
            inc(j);
            next;
          end;
        end;
        MSExcel.ActiveWorkBook.SaveAs(SaveDialog1.FileName);
        MSExcel.ActiveWorkBook.Saved:=True;
        MSExcel.Quit;
      end;
    end;