6

我使用 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\""
4

2 回答 2

6

我在 Microsoft 的网站上找到了一些适用于您的方案的文档。他们建议将所有数字转换为字符串。

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

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

例如:

* 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.
于 2010-07-08T18:52:41.997 回答
1

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

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

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

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

这个 8 行的值在注册表 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel\ -->TypeGuessRows=8 中定义。

我希望它会有所帮助。

于 2010-12-09T15:00:39.860 回答