我使用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\""
答案 0 :(得分:6)
我在微软的网站上找到了适用于您的方案的一些文档。他们建议将所有数字转换为字符串。
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.
答案 1 :(得分:1)
我有同样的问题,但有字符串值。返回数值,但字符串值返回NULL。我想将数值加载为字符串值。该列可以包含数字和非数字代码(例如:100344567和PRD001X01)。
Excel驱动程序认为该列的类型为numeric,因为前8行中的值是numeric类型。
即使我将单元格定义为文本(格式单元格),它也不起作用。
要强制驱动程序将列“看到”为字符串,我只需在数值前面加上引号('100344567)。这会将数值转换为字符串。
此值为8行在注册表HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Jet \ 4.0 \ Engines \ Excel \ - > TypeGuessRows = 8中定义。
我希望它会有所帮助。