代码是这样的
function TForm1.LoadExcel(AFileName: String): Boolean;
var
  vExcel: Variant;
  i, RowCount: integer;
  instRecord: TInstructRecord;
  sMessage,sTemp: string;
begin
   vExcel := CreateOleObject('Excel.Application'); //创建应用对象
   vExcel.WorkBooks.Open(AFileName);
   RowCount := vExcel.Worksheets[1].UsedRange.Rows.Count; //读行数
   qry1.DisableControls();
         for i := 2 to RowCount do
      begin
      instRecord.date := trim(vExcel.Worksheets[1].Cells[i, 1].Value);
      instRecord.name := trim(vExcel.Worksheets[1].Cells[i, 10].Value);
      instRecord.time := trim(vExcel.Worksheets[1].Cells[i, 11].Value);
      instRecord.pass := trim(vExcel.Worksheets[1].Cells[i, 19].Value);
      instRecord.prbl := trim(vExcel.Worksheets[1].Cells[i, 20].Value);
        end;
            begin            adoqry1.Open;
            adoqry1.Edit;
            adoqry1.FieldByName('date').AsString := instRecord.date;
            adoqry1.FieldByName('name').AsString := instRecord.name;
            adoqry1.FieldByName('time').AsString := instRecord.time;
            adoqry1.FieldByName('pass').AsString := instRecord.pass;
            adoqry1.FieldByName('prbl').AsString := instRecord.prbl;
            adoqry1.Open;
            end;
            adoqry1.EnableControls;
            vExcel.WorkBooks.Close;
            vExcel.Quit;
            vExcel := Unassigned;
       end;
现在有2个问题,第一个就是Execl中同一列有的数据是数字,有的是文本,一部分就读不出来,就算把单元格格式改成一样的也不行,怎么样在尽量不改动execl的情况下把全部数据都读出来.这个问题我在网上发现很多人遇到,可是没有好的解决办法.
 比如一列是这样,我全部改成文本格式了:    1234            (读得出)
                                     1234/5321       (读不出)
                                     1453            (读得出)
                                     4234/5345/1341  (读不出)
第二个问题是:在读取完数据,对ADOquery进行赋值的时候,出现错误,提示找不到对应的FIeld ,可我FIeld已经手动添加了,是string类型的,fieldkind为fkInternalCalc
 

解决方案 »

  1.   

    现在对第一个问题的的解决方法是在所有的记录后面都上'/'.
                                         1234/            (读得出) 
                                         1234/5321/       (读得出) 
                                         1453/            (读得出) 
                                         4234/5345/1341/  (读得出) 
    可是这样原来的Execl文件改动太大,我想要更好的解决方法