c# - ACE.OLEDB 提供程序错误地读取了一些列名称

标签 c# excel oledb ms-jet-ace

我正在使用 ACE.OLEDB 从 C# 应用程序读取 excel 文件。 到目前为止,一切都运行良好,直到今天我注意到其中一个列名称被错误地读取。

这是我的 excel 文件中的内容

Here's what I've got in my excel file

这是我在调试器中得到的

And here's what is read in the code

基本上,由于某种原因,点 (".") 被替换为散列 ("#")。

代码简单明了,大部分都可以正常工作,不要认为问题就在那里,但为了清楚起见,将在此处显示。

DataTable data = new DataTable();    
string strAccessConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path.FullName + ";Extended Properties=\"Excel 12.0\";\"HDR=YES\";\"IMEX=1;\"";     
OleDbConnection myAccessConn = new OleDbConnection(strAccessConn);
string strAccessSelect = "select  * from [" + SheetName + "];";
OleDbCommand myAccessCommand = new OleDbCommand(strAccessSelect, myAccessConn);
OleDbDataAdapter myDataAdapter = new OleDbDataAdapter(myAccessCommand);                           
myDataAdapter.Fill(0, maxRows, data);  

是我做错了什么还是 OLEDB 中的错误?

最佳答案

此问题仅发生在标题行中,这是因为它阻止了点 (.) 在 Excel 文件的标题中显示。 Excel 文件标题中的点(当转换为 XML 时)可能会导致一些问题。尽管 . 在 XML 中没有意义,但 Excel 如何来回序列化必须有额外的约定(不是 100% 的)。因此,在输入数据时,您只需输入 # 即可将其转换为 . 在 excel 的标题中以及当您输出带有 .< 的标题时 它将显示为 #

要解决此问题,您只需将连接字符串 header 语法更改为 HDR=No 即可关闭 header 。当数据不是作为标题而是作为普通行进入时,可以很容易地作为 float 处理, 不会导致任何问题。

关于c# - ACE.OLEDB 提供程序错误地读取了一些列名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20687817/

相关文章:

c# - 在没有标题的工作簿中创建工作表 ace.oledb

c# - LINQ 多重排序依据

c# - 使用 EnumMemberAttribute 并进行自动字符串转换

c# - 是否可以编写在 .NET 上运行的恶意软件?

c# - 处理两个大的 Excel 文件

oracle - 为什么返回的 OleDbConnection.GetSchema ("Columns") 没有行,而相同的代码适用于 OracleConnection?

mysql - 简单查询以获得准确结果

c# - 在异常情况下完成 Saga

excel - 如何过滤字符串文本单元格?

excel - 如何检查子字符串是否在Excel工作表行中的任何条目中?