我用adoquery直接读取execl文件,遇到一个问题。在文件里有些列式有数字又有文字的
例如:
一月份
200
二月份
300但用 while not Excel.Eof do循环读取的时候发现只有数字可以读取得出而汉字就无法读取,我已经将此列已经设置成文本类型啦,但汉字还是无法读取,读取汉字的时候这行是空的,这个问题如何解决呢?望高手解答,谢谢

解决方案 »

  1.   

    應該是類型問題,改用ole方式呢
      

  2.   

    你測試一下
    /*
      OpenDialog1 : TOpenDialog1;
      ADOConnection1 : TADOConnection;
      //手工连接到Excel时,须将Extended Properties设置为Excel 8.0
      ADOQuery1 : TADOQuery;
    */procedure TForm1.BitBtn1Click(Sender: TObject);
    Var
      sFileName, sTableName : String;
      sl : TStringList;
    begin
      If Not OpenDialog1.Execute Then Exit;
      sFileName := OpenDialog1.FileName;
      ADOConnection1.Connected := False;
      ADOConnection1.ConnectionString := := 'Provider=Microsoft.Jet.OLEDB.4.0;Password="";Data Source=' + sFileName + ';Extended Properties="Excel 8.0;IMEX=1";Persist Security Info=False';
      ADOConnection1.Connected := True;
      //
      sl := TStringList.Create;
      ADOConnection1.GetTableNames(sl); //sl是表名列表(Excel中可能有很多个sheet)
      //Excel表中可能有很多个sheet,可以循环,本程序只处理了第一个sheet(sl[0])
      //for i := 0 to sl.Count-1 Do
      //begin
      //  sTableName := sl[i];
      //end;
      sTableName := sl[0];
      If Pos('$', sTableName)>0 Then sTableName := '[' + sTableName + ']';
      ADOQuery1.Close;
      ADOQuery1.SQL.Clear;
      ADOQuery1.SQL.Text := 'SELECT * FROM ' + sTableName;
      ADOQuery1.Open;
      sl.Free;
    end; 
      

  3.   


    procedure TForm1.Button5Click(Sender: TObject);
    var
      ExcelApp:Variant;
    begin
      ExcelApp:=CreateOleObject('Excel.Application');
      ExcelApp.workbooks.open(apppath+'LED标签地址.xls');
      edt1.Text:=ExcelApp.Cells[2,3];
      edt2.Text:=ExcelApp.Cells[3,3];
      ExcelApp.quit;
    end;循环自己加上试试看。