代码之家  ›  专栏  ›  技术社区  ›  flashnik

通过OLEDB读取Excel文件时,非空单元格中的dbnull

  •  5
  • flashnik  · 技术社区  · 14 年前

    我使用OLEDB读取Excel文件。其中一列有一个“公共”格式,包含带字母的字符串和仅由数字组成的值。检索字符串值没有问题,但检索纯数值时 DBNull .

    如何解决?

    我使用以下连接字符串打开 Excel 2003文件 (XLS):

    "Provider=Microsoft.Jet.OLEDB.4.0;
     Data Source=C:\\file.xls;
     Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\""
    
    2 回复  |  直到 10 年前
        1
  •  6
  •   jdot    14 年前

    我在微软的网站上找到了一些适用于你的场景的文档。他们建议把所有的数字转换成字符串。

    http://support.microsoft.com/kb/257819

    如前所述,ADO必须猜测Excel工作表或区域中每一列的数据类型。(这不受Excel单元格格式设置的影响。)如果数字值与同一列中的文本值混合,则可能会出现严重问题。jet和odbc提供程序都返回多数类型的数据,但为少数类型返回空(空)值。如果这两种类型在列中混合均匀,则提供程序将选择数字而不是文本。

    例如:

    * In your eight (8) scanned rows, if the column contains five (5) numeric values and three (3) text values, the provider returns five (5) numbers and three (3) null values.
    * In your eight (8) scanned rows, if the column contains three (3) numeric values and five (5) text values, the provider returns three (3) null values and five (5) text values.
    * In your eight (8) scanned rows, if the column contains four (4) numeric values and four (4) text values, the provider returns four (4) numbers and four (4) null values.
    
        2
  •  1
  •   Augusto    14 年前

    我也有同样的问题,但是有字符串值。返回数值,但字符串值返回为空。我想将数值加载为字符串值。列可以包含数字和非数字代码(例如:100344567和PRD001X01)。

    Excel驱动程序认为列是numeric类型,因为前8行中的值是numeric类型。

    即使我将单元格定义为文本(格式化单元格),它也不起作用。

    为了强制驱动程序将列“视为”字符串,我只需在数值(“100344567”)前面加上一个引号。这会将数值转换为字符串。

    此值为8行,在注册表中定义:HKEY\U local\machine\software\microsoft\jet\4.0\engines\excel \-->typeguessrows=8。

    希望能有所帮助。