为什么我在web C#里面用ADO打开Excel文件读里面的数据,有些列就是读出Null出来.有没有人遇到这些问题呢.如何解决呢? 有没有更好的方法解决C#读Excel的问题???

解决方案 »

  1.   

    空值肯定是null,如果你不想出现null 那就加个判断吧。
      

  2.   

    select isnull(column,replacement) from table
      

  3.   

    如果此列是字母,那么是数字的会读取到DBNull.Value,如果是这样的话,可以做一个模板,中间加一个宏,先运行宏,把那些数字前面添加一个',然后再重新读取数据
      

  4.   

    混用数据类型时应注意的事项如上文所述,ADO 必须猜测 Excel 工作表或范围中各列的数据类型。(这不受 Excel 单元格格式设置的影响。)如果同一列中既有数字值,也有文本值,会出现严重的问题。Jet 和 ODBC 提供程序将返回占多数的类型的数据,但对于占少数的数据类型,则会返回 NULL(空)值。如果该列中两种类型数据的数量相等,提供程序将优先选择数字型数据,放弃文本型数据。例如: • 在被扫描的八 (8) 行中,如果该列包含五 (5) 个数字值和三 (3) 个文本值,则提供程序将返回五 (5) 个数字和三 (3) 个空值。 
    • 在被扫描的八 (8) 行中,如果该列包含三 (3) 个数字值和五 (5) 个文本值,则提供程序将返回三 (3) 个空值和五 (5) 个文本值。 
    • 在被扫描的八 (8) 行中,如果该列包含四 (4) 个数字值和四 (4) 个文本值,则提供程序将返回四 (4) 个数字和四 (4) 个空值。 
    因此,如果列中包含不同类型的值,唯一的解决方法是将该列中的数字值存储为文本,然后在需要时使用 Visual Basic VAL 函数或等效的函数在客户端应用程序中将其转换回数字。对于只读数据,若要解决此问题,可在连接字符串的“Extended Properties”部分设置“IMEX=1”,启用导入模式。这将强制使用ImportMixedTypes=Text 注册表设置。但在此模式下,执行更新操作时可能会出现意外的结果。 有关此设置的其他信息,请单击下面的文章编号,查看 Microsoft 知识库中相应的文章:
    194124 PRB:Excel Values Returned as NULL Using DAO OpenRecordset(使用 DAO OpenRecordset 时,返回的 Excel 值为 NULL)链接串写成:string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\1.xls;Extended Properties='Excel 8.0;IMEX=1;'";
      

  5.   

    我这儿有两种方法,一种是比较笨的,另一种是网上找到的.
    我是在vb6中做的,使用的ado和adox版本是2.6第一种:
    dim varTemp      这个变量在程序运行中不赋任何值,它的值就是一个null值
    dim varVal 
    dim destVal
    varVal=xlsheet.cells(1,1)
    destVal=iff(varVal=varTemp,0,varVal)  这句的意思是,如果varVal和varTemp相等时,即是空值时,则iif返加0,否则返加varVal第二种(标准方法):
    dim cat as new adox.catalog
    dim tbl as new adox.tabletbl.columns.append "abc"
    tbl.columns("abc").properties("NullAble")=true
    tbl.columns("abc").Properties("Jet OLEDB:Allow Zero Length") = True这样在拷贝数据时就不会聚错了.