2010-04-29 57 views
4

我正在使用ACE OLEDB驅動程序從Excel 2007電子表格中讀取數據,而且我發現任何'。'列名中的字符被轉換爲'#'字符。舉例來說,如果我有一個電子表格如下:如何避免OLEDB將「。」s轉換爲列名中的「#」s?

Name  Amt. Due  Due Date 
Andrew  12.50   4/1/2010 
Brian  20.00   4/12/2010 
Charlie  1000.00   6/30/2010 

時,用下面的代碼讀取第二列的名稱將被報告爲「金額#由於」:

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

這似乎是http://stackoverflow.com/questions/1088394/why-is-the-column-name-from的另一個變型-a-CSV文件,不同高於其-數據表 – 2010-04-29 01:39:47

回答

1

看到這個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 
4

期間正在更改爲#,因爲.在列名中不合法。如果列名僅在內部使用,那麼這根本就沒有關係,但是因爲您提出這個問題,我假設列名將顯示在其中的#的報告或網格中。

如果您事先不知道哪些列將包含.,那麼在顯示列名的任何地方您都可以執行label1.Text = colname.Replace("#", "."),並希望其他列名都不包含#。可能有一些方法可以讓OleDb將.替換爲一個更模糊不常用的字符(如|~),這樣可以讓您更少地擔心會刪除某些其他列名稱。

相關問題