我正在使用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的标头中,并将其转换为.
,当您输出带有.
的标头时,它将显示为#
。
要解决此问题,您可以通过将连接字符串标题语法更改为HDR=No
来简单地打开标题。当数据不是以标头而是普通行的形式输入时,则可以轻松地将其作为浮点数处理,并且.
不会引起任何问题。