3

希望有人可以在这里帮助我...

我正在尝试将 .xlsx 文件加载到 DataTable 中,然后使用 C#.Net 处理信息。

启动并运行基础知识,使用 OLEDB 连接,加载数据并将其输出到 DataGridView 以检查数据。

我遇到的问题是某些单元格(只有少数)不加载包含在 excel 文件中的数据。例如,在我的示例单元格“C3”中,它是一个通用格式的单元格,就像 excel 中这一行上的所有其他单元格一样,它不会加载其内容。

实际的 Cell 应该作为 MEMBERSHIP 加载,但是在将其输出到 gridview 时它显示为空白,或者在调试 DataRow / Col 值时它是空白的,即使 excel 文件中有该单元格的数据也是如此。如果我将此单元格 MEMBERSHIP 的内容更改为 123456 之类的数字,则它可以加载此值,但如果我将值更改回字符,它会再次返回空白。

大多数单元格(15 个中的 13 个)加载到该行上,除了 2 个,并且它们具有相同的格式。

这是我在代码中使用的连接字符串,实际上是从这个站点获得的:):

try
{

string tabsheet = Path.GetFileNameWithoutExtension(FullFileName); 
string connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + FullFileName + ";" + "Extended Properties='Excel 12.0 Xml;HDR=NO'";

var adapter = new OleDbDataAdapter("SELECT * FROM [" + tabsheet + "$]",connectionString);

adapter.Fill(aDataTable); 
}
catch (Exception er)
{
logfile.AddToFile("GetDataTableFromCsv exception: " + er.Message);
}

卡住了,救命!:)

4

1 回答 1

5

我的猜测是,在同一列上方的同一列中有几个单元格,其中字符串值为“MEMBERSHIP”是数字。这会导致 OLEDB 推断这些列中的数据是数字的,因此将忽略非数字值。

解决方案是在您的 conn 字符串的扩展属性部分中包含 IMEX=1:

string connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + FullFileName + ";" + "Extended Properties='Excel 12.0 Xml;HDR=NO;IMEX=1;'"; 

connectionstrings.com上的 Excel 条目解释了此属性设置,并且还有一个警告:

“IMEX=1;” 告诉驱动程序始终将“混合”(数字、日期、字符串等)数据列作为文本读取。请注意,此选项可能会对 excel 工作表写入访问产生负面影响。

于 2012-06-02T05:39:45.857 回答