2013-07-15 62 views
1

使用C#讀取excel文件時遇到一個問題。在我的Excel文件中,一個是DateTime的列,它在Excel文件中的值很長。因此,當我使用C#讀取使用C#的相同值時,Excel會將其轉換爲######格式。任何人都可以請幫忙:我怎樣才能得到日期時間值而不是#####?在C#中讀取excel文件時獲取######值

我的代碼如下所示:

using Excel = Microsoft.Office.Interop.Excel; 
Excel.Application xlApp; 
Excel.Workbook xlWorkBook; 
Excel.Worksheet xlWorkSheet; 
object misValue = System.Reflection.Missing.Value; 
ExcelObj = new Microsoft.Office.Interop.Excel.Application(); 
      Microsoft.Office.Interop.Excel.Workbook theWorkbook = ExcelObj.Workbooks.Open(oldg.FileName, Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
      Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
      Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
      Type.Missing, Type.Missing); 
      Microsoft.Office.Interop.Excel.Sheets sheets = theWorkbook.Worksheets; 
Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)sheets.get_Item(1); 
for (int i = 3; i <= worksheet.UsedRange.Rows.Count; i++) 
{ 
    var getvalue = excel_getValue("B" + i); 
} 
+1

調整列的大小? –

+1

調整大小在哪裏?.. –

回答

1

嘗試這樣的: - 如果你有個約會科拉姆和值超出範圍

var conv = DateTime.FromOADate("B"+i); 
4

您的日期轉換可能會失敗。如果輸入「5555555555555555555555」(說)爲日期欄你會得到一系列的「#####」和提示狀態:

日期和時間爲負數或過大顯示爲### ###。

這最常見的原因是您的美國格式的日期(MM/dd/yyyy),並且您試圖將其轉換爲歐洲格式的日期(dd/MM/yyyy)或你根本沒有轉換字符串。

欲瞭解更多信息,爲什麼Excel顯示「######」,而不是實際的列值見this Super User question

+0

該列的格式是DateTime,即使我嘗試了ExcelObj.get_Range(「B」+ i).get_Value()。ToString();仍然得到相同的#####價值在我的excel相同的價值,當我增加該列的寬度它會告訴我日期時間。 –

+0

@DhavalPatel - 那麼這是我在我的SU回答中提到的另一個問題 - 該列太狹窄了。 – ChrisF

+0

閱讀列可以刪除該列的格式嗎? –

0

您需要閱讀Value2,而不是在該小區的ValueValue將返回與單元格的顯示內容相關的string,而Value2將返回一個object,它顯示了Excel對該單元格的理解 - 即。它可能是一個double,一個DateTime等,你將不得不測試它並投射它。

但是,我不確定你在代碼中究竟做了什麼,看起來你在這一行中留下了什麼?

var getvalue = excel_getValue("B" + i); 

如果你的意思是像

worksheet.getValue("B" + i); 

這應該是同樣的事情worksheet.Value["B" + i],只是Value2取代Value。如果excel_getValue是您自己的功能,請執行類似操作,請查看Value屬性並將其更改爲Value2。我通常按​​行號和列號訪問東西,對我而言,這兩個選項看起來像這樣:

string value = worksheet.Cells[2, i].Value; 
object val2 = worksheet.Cells[2, i].Value2;