各位大侠,我用delphi从excel中获取数据时,遇到了excel单元格中#VALUE!这样的数据,结果程序报错,could not convert variant of type (dispatch) into type (string),请教下有没有好的方法处理?

解决方案 »

  1.   

    1、在导入时,先手工清除Excel表格的#VALUE值;
    2、要么就要绕开这种情况,加一个判断
      if ExclApp.ActivexSheet[1].Cells[1,1].value = '#VALUE!' then
      
    3、建议用SQL语句直接从Excel获得数据,
    select * from OpenDataSource('Microsoft.Jet.OLEDB.4.0','Data Source=''d:\123.xls'';Extended Properties=''Excel 8.0''')...Sheet1$
    这样SQL会处理掉那些无效值!
      

  2.   

    如果是用ado直接读取转换时不要用 .string用.value先判断一下
    另外也可以使用active插件逐格获取excel的内容,不过可惜我手里只有c#的代码
      

  3.   

    用varType判断一下是不是dispatch型:
    if varType(Excelapp.Cells[i,j])<>varDispatch then
    ...不过,这个不应该是Delphi做的事,你应该想法办排除掉这个错误
      

  4.   

    我之前用过这个方法,结果跟程序,发现所有的vartype都是varDispatch类型的,包括正常的,郁闷!
      

  5.   

    SQL语句直接从Excel获得数据,
    select * from OpenDataSource('Microsoft.Jet.OLEDB.4.0','Data Source=''d:\123.xls'';Extended Properties=''Excel 8.0''')...Sheet1$
    这样SQL会处理掉那些无效值!这种方法还是比较好用