2015-09-10 99 views
0

我有一個Excel文檔,一列是文本類型。一些單元格包含字母和數字的組合,而其他單元格僅包含數字。我發現如果單元格值只包含數字,讀取器會將單元格中的值解釋爲長整數,並將其截斷。因此,而不是讓「120500923」,等我回來「1.20501e + 008」 這裏是我的代碼:使用OleDBDataReader從Excel電子表格中讀取字符串

 OleDbConnection myConnection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source="myfile.xls";Extended Properties=\"Excel 8.0;HDR=NO;IMEX=1\""); 
     OleDbCommand myCommand = new OleDbCommand("Select * from [Sheet1];"); 
     myConnection.Open(); 
     myCommand.Connection = myConnection; 
     OleDbDataReader myReader = myCommand.ExecuteReader(); 
     string[] myLine = new string[5]; 
     while (myReader.Read()) 
     { 
      for (int i = 0; i < 5; i++) //read the first 5 columns 
      { 
       myLine[i] = (string)myReader[i].ToString(); 
      } 
     } 

我怎樣才能指導讀者對待所有單元格值作爲字符串而不是數字?我不想修改excel電子表格,因爲它是由人員編輯的,我希望保持簡單。

感謝, 尼克

回答

0

一些google搜索和嘗試之後,我發現了一些有用的東西。 我發現,如果我將Jet的連接字符串替換爲ACE,則單元格值將被視爲一個字符串。 於是,我改變了下面的第一行代碼:

OleDbConnection myConnection = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\"myfile.xls\";Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1\""); 

由於我的電腦是Windows 10/64位,默認安裝的MDAC司機是64位。我不得不卸載它並安裝32位版本(我使用SharpDevelop,顯然我只能編譯32位應用程序),從http://www.microsoft.com/en-us/download/details.aspx?id=13255。即使我沒有安裝Office 2003或更高版本,我也可以使用版本12。

相關問題