Excel数据提取 – 发布列数据types
我正在写一个C#库来读取Excel文件(xls和xlsx),我遇到了一个问题。
与此问题中所expression的内容完全相同,如果我的Excel文件的列有string值,但在第一行有一个数字值,则OLEDB提供程序将该列假设为数字,并返回NULL
不是数字的列。
我知道,正如在提供的答案 ,我可以在registry中进行更改,但由于这是一个图书馆,我打算在许多机器上使用,并不想改变每个用户的registry值,我想知道如果有是更好的解决scheme。
也许除了ACE.OLEDB以外的数据库提供者(似乎JET已经不再被支持,不足以被考虑)?
另外,由于这需要在XLS / XLSX上运行,所以诸如EPPlus / XML阅读器之类的选项将不适用于xls版本。
你的连接string应该像这样
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\myFolder\myExcelfile.xlsx;Extended Properties="Excel 12.0 Xml;HDR=YES;IMEX=1";
连接string中的IMEX = 1是您需要将该列作为混合数据types处理的部分。 这应该工作正常,而不需要编辑registry。
HDR = Yes只是将第一行标记为列标题,并不是特定问题中需要的,但是我已经将其包含在内。
总是使用IMEX = 1是一种更安全的方式来检索混合数据列的数据。
来源: https : //www.connectionstrings.com/excel/
编辑:
这是我正在使用的数据:
这是输出:
这是我使用的确切代码:
string connString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\test.xlsx;Extended Properties=""Excel 12.0 Xml;HDR=YES;IMEX=1"""; using (DbClass db = new DbClass(connString)) { var x = db.dataReader("SELECT * FROM [Sheet1$]"); while (x.Read()) { for (int i = 0; i < x.FieldCount; i++) Console.Write(x[i] + "\t"); Console.WriteLine(""); } }
DbClass是我为了简化生活而做的一个简单的包装。 在这里能find它: