gpt4 book ai didi

c# - 使用 OleDbDataAdapter 从 Excel 工作表中获取数据的问题

转载 作者:太空狗 更新时间:2023-10-29 21:15:07 25 4
gpt4 key购买 nike

首先,我想说我是在深水区,因为我只是对公司其他人编写的代码进行一些更改,使用 OleDbDataAdapter 与 Excel 进行“对话”,然后我'我不熟悉那个。那里有一个错误,我无法理解。

我正在尝试使用 OleDbDataAdapter 读取大约 450 行的 excel 文件。

在代码中是这样实现的:

connection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source='" + path + "';" + "Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1;\"");
connection.Open();
OleDbDataAdapter objAdapter = new OleDbDataAdapter(objCommand.CommandText, connection);
objAdapter.Fill(objDataSet, "Excel");

foreach (DataColumn dataColumn in objTable.Columns) {
if (dataColumn.Ordinal > objDataSet.Tables[0].Columns.Count - 1) {
objDataSet.Tables[0].Columns.Add();
}
objDataSet.Tables[0].Columns[dataColumn.Ordinal].ColumnName = dataColumn.ColumnName;
objImport.Columns.Add(dataColumn.ColumnName);
}

foreach (DataRow dataRow in objDataSet.Tables[0].Rows) {
...
}

除了一件事,一切似乎都运行良好。第二列主要填充四位数字,如 6739、3920 等,但 fice 行具有字母数字值,如 8201NO 和 8205NO。这五个单元格被报告为具有空白内容而不是它们的字母数字内容。我在 excel 中检查过,此列中的所有单元格都标记为文本。

顺便说一下,这是一个 xls 文件,而不是 xlsx。

有没有人知道为什么这些单元格在 DataRow 中显示为空白,但数字单元格显示正常?还有其他包含字母数字内容的列,显示得很好。

最佳答案

发生的事情是 excel 试图根据该列中的前几个值将数据类型分配给电子表格列。我怀疑如果您查看该列中的属性,它会说它是一个数字列。

当您开始尝试使用 jet 查询该电子表格时,问题就来了。当它认为它正在处理一个数字列并找到一个 varchar 值时,它会安静地返回任何内容。甚至没有神秘的错误消息。

作为一种可能的解决方法,您可以将其中一个字母数值移动到数据的第一行,然后尝试解析。我怀疑您随后会开始获取字母数字行的值...

看看this article .它详细介绍了这个问题。它还讨论了一种可能的解决方法:

However, as per JET documentation, we can override the registry setting thru the Connection String, if we set IMEX=1( as part of Extended Properties), the JET will set the all column type as UNICODE VARCHAR or ADVARWCHAR irrespective of ‘ImportMixedTypes’ key value.hey

关于c# - 使用 OleDbDataAdapter 从 Excel 工作表中获取数据的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3817378/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com