我正在使用ACE OLEDB驱动程序从Excel 2007电子表格中读取,我发现任何'''。列名中的字符将转换为“#”字符。例如,如果我在电子表格中有以下内容:
Name Amt. Due Due Date
Andrew 12.50 4/1/2010
Brian 20.00 4/12/2010
Charlie 1000.00 6/30/2010
使用以下代码读取时,第二列的名称将报告为“Amt #Due”:
OleDbConnection connection = new OleDbConnection(
"Provider=Microsoft.ACE.OLEDB.12.0; Data Source=MyFile.xlsx; " +
"Extended Properties=\"Excel 12.0 Xml;HDR=YES;FMT=Delimited;IMEX=1\"");
OldDbCommand command = new OleDbCommand("SELECT * FROM MyTable", connection);
OleDbReader dataReader = command.ExecuteReader();
System.Console.WriteLine(dataReader.GetName(1));
我已经阅读了所有可以找到的文档,但我还没有找到任何甚至提到会发生这种情况的内容。有没有人遇到过这个?有没有办法解决这个问题?
答案 0 :(得分:5)
期间更改为#
,因为.
在列名中不合法。如果列名仅在内部使用,那么这根本不重要,但是因为你问的问题我假设列名在一个报告或网格中显示在其中#
的地方
如果您事先不知道哪些列将包含.
,那么在显示列名称的任何位置都可以执行label1.Text = colname.Replace("#", ".")
并希望其他任何列名都不包含{ {1}}。可能有一些方法可以让OleDb用一个更加模糊和不常见的角色(如#
或.
)替换|
,这样可以让你~
更少担心捣蛋其他一些专栏名称。
答案 1 :(得分:2)
请参阅此OleDBAdapter Excel QA我通过堆栈溢出发布。
我使用您的数据在Excel中创建了一个.xlsx工作簿,然后更改了OleDbConnection并且读取了您的数据就好了。
string sql = "SELECT F1, F2, F3 FROM [sheet1$] WHERE F1 IS NOT NULL";
OleDbConnection connection = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + PrmPathExcelFile + @";Extended Properties=""Excel 12.0;IMEX=1;HDR=NO;TypeGuessRows=0;ImportMixedTypes=Text""");
将数据写入控制台:
Name Amt. Due Due Date
Andrew 12.50 4/1/2010
Brian 20.00 4/12/2010