我正在使用 ACE.OLEDB 从 C# 应用程序读取 excel 文件。 到目前为止,一切都运行良好,直到今天我注意到其中一个列名称被错误地读取。
这是我的 excel 文件中的内容
这是我在调试器中得到的
基本上,由于某种原因,点 (".") 被替换为散列 ("#")。
代码简单明了,大部分都可以正常工作,不要认为问题就在那里,但为了清楚起见,将在此处显示。
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/