我想把dbgrid中的数据转化成excel的形式,可是我发现一旦我数据库中的一条记录如(012345)的第一位是0,则转化后excel表格中出现的是数据的第一位莫名其妙的少掉了,结果转化后的数据是(12345),请问这是怎么回事,我把源码贴出来,请高手帮我改一下.谢谢
unit studentinfosearch;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DB, ADODB, Grids, DBGrids, StdCtrls, Mask, DBCtrls,
  TFlatEditUnit, TFlatButtonUnit, TFlatComboBoxUnit, OleServer, Excel2000;type
  TForm2 = class(TForm)
    DBGrid1: TDBGrid;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    FlatEdit1: TFlatEdit;
    FlatEdit2: TFlatEdit;
    DataSource1: TDataSource;
    Cmdpolity: TFlatComboBox;
    Cmdmajor: TFlatComboBox;
    Btquery: TFlatButton;
    Btclose: TFlatButton;
    FlatEdit3: TFlatEdit;
    FlatButton1: TFlatButton;
    SaveDialog1: TSaveDialog;
    ADOQuery1: TADOQuery;
    ADOQuery2: TADOQuery;
    ExcelWorksheet1: TExcelWorksheet;
    procedure BtqueryClick(Sender: TObject);
    procedure BtcloseClick(Sender: TObject);
    procedure initialize();
    procedure FormCreate(Sender: TObject);
    procedure FlatEdit1KeyPress(Sender: TObject; var Key: Char);
    function FindVarData(const V: Variant): PVarData;
    function VarIsEmpty(const V: Variant): Boolean;
    procedure CopyToExcel(Target: TDbgrid);
    procedure FlatButton1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form2: TForm2;implementation{$R *.dfm}
uses searchstudentinfo, ComObj;
procedure TForm2.CopyToExcel(Target: TDbgrid);
var
iCount, jCount: Integer;
XLApp: Variant;
Sheet: Variant;
begin
Screen.Cursor := crHourGlass;
if not VarIsEmpty(XLApp) then
begin
XLApp.DisplayAlerts := False;
XLApp.Quit;
VarClear(XLApp);
end;
try
XLApp := CreateOleObject('Excel.Application');
except
Screen.Cursor := crDefault;
Exit;
end;
XLApp.WorkBooks.Add[XLWBatWorksheet];
XLApp.WorkBooks[1].WorkSheets[1].Name := '数据导出';
Sheet := XLApp.Workbooks[1].WorkSheets['数据导出'];if not Target.DataSource.DataSet.Active then
begin
Screen.Cursor := crDefault;
Exit;
end;
Target.DataSource.DataSet.first;
for iCount := 0 to Target.Columns.Count - 1 do
begin
Sheet.cells[1, iCount + 1] := Target.Columns.Items[iCount].Title.Caption;
end;
jCount := 1;
while not Target.DataSource.DataSet.Eof do
begin
for iCount := 0 to Target.Columns.Count - 1 do
begin
Sheet.cells[jCount + 1, iCount + 1] := Target.Columns.Items[iCount].Field.AsString;
end;
Inc(jCount);
Target.DataSource.DataSet.Next;
end;
XlApp.Visible := True;
Screen.Cursor := crDefault;
//xlApp.ActiveSheet.PageSetup.PrintGridLines := false;
end;function TForm2.VarIsEmpty(const V: Variant): Boolean;
begin
  Result := FindVarData(V)^.VType = varEmpty;
end;
function TForm2.FindVarData(const V: Variant): PVarData;
begin
  Result := @TVarData(V);
  while Result.VType = varByRef or varVariant do
    Result := PVarData(Result.VPointer);
end;
procedure TForm2.initialize();
begin
  with ADOQuery2 do
  begin
    close;
    sql.Clear;
    sql.Add('select distinct polity,major from students ');
    open;
    while not ADOQuery2.Eof do
    begin
      Cmdpolity.Items.Add(Fields[0].value);
      Cmdmajor.Items.Add(Fields[1].value);
      ADOQuery2.Next;
    end;
  end;
end;
procedure TForm2.BtqueryClick(Sender: TObject);
var sqlstr:string;
begin
    with ADOQuery1 do
    begin
      close;
      SQL.Clear;
      sqlstr:='select * from students where';
      if  FlatEdit1.Text<>'' then
        sqlstr:=sqlstr+' studentsid='+QuotedStr(flatedit1.Text)+' and ';
      if  FlatEdit2.Text<>'' then
        sqlstr:=sqlstr+' name='+QuotedStr(flatedit2.Text)+' and ';
      if  Cmdmajor.ItemIndex<>-1 then
        sqlstr:=sqlstr+' major='+QuotedStr(Cmdmajor.Text)+' and ' ;
      if  FlatEdit3.Text<>'' then
        sqlstr:=sqlstr+' class='+QuotedStr(flatedit3.Text)+' and ';
      if  Cmdpolity.ItemIndex<>-1  then
        sqlstr:=sqlstr+' polity='+QuotedStr(Cmdpolity.Text)+' and ';
      sqlstr:=copy(sqlstr,0,length(sqlstr)-5);
      sql.Add(sqlstr);
      open;
    end;end;procedure TForm2.BtcloseClick(Sender: TObject);
begin
  close;
end;
procedure TForm2.FormCreate(Sender: TObject);
begin
  initialize();
end;
procedure TForm2.FlatEdit1KeyPress(Sender: TObject; var Key: Char);
begin
 if key=#13 then
  begin
    perform(cm_dialogkey,vk_tab,0); //焦点按照Taborder的顺序下移
    exit;
  end;
end;
procedure TForm2.FlatButton1Click(Sender: TObject);
begin
  CopyToExcel(DBGrid1);
end;end.