2016-08-01 73 views
1

我需要檢索日期的excel列。 我的第一列'A'值的格式如下6/20/2016 10:44。我有使用C#獲取excel值日期

using DocumentFormat.OpenXml; 

double d = double.Parse(theCell.InnerText); 
DateTime conv = DateTime.FromOADate(d).Date; 

我的第二列「B」被格式化爲6/20/2016.由於沒有時間,只是日期格式檢索列的「A」沒問題。 但我的問題是,當我嘗試下面的代碼:

using DocumentFormat.OpenXml; 

double d = double.Parse(theCell.InnerText); 
DateTime conv = DateTime.FromOADate(d).Date; 

theCell.InnerText值是1455

我有一個不同的值

。值更改爲12/25/1903 12:00:00 AM

如何使用這種日期格式6/30/2016檢索excel值?

+0

被格式化爲一個日期B列中的值或者是它實際上是一個字符串? – dev1998

+0

嗨@ dev1998,謝謝你檢查我的問題。 B列格式化爲日期。 –

+0

這一切都爲我工作,我正在使用你正在使用的相同的2行。對於錯誤的值,調試器顯示的是否爲Cel​​l.InnerText? – dev1998

回答

2

我所在的一些代碼,從這裏並修改了它:open xml reading from excel file

我想到Hambone想着同一件事,即Excel單元格有別的東西在裏面,或者你不讀你認爲你的細胞是。

這裏是我使用的代碼,和它的作品對我來說:

using System; 
using System.Linq; 
using DocumentFormat.OpenXml.Packaging; 
using DocumentFormat.OpenXml.Spreadsheet; 



namespace ConsoleApplication1 
{ 
    class Program 
    { 

     private static void Main(string[] args) 
     { 
      var filePath = @"c:\xyz\stack_c_Sharp.xlsx"; 
      using (var document = SpreadsheetDocument.Open(filePath, false)) 
      { 
       var workbookPart = document.WorkbookPart; 
       var workbook = workbookPart.Workbook; 

       var sheets = workbook.Descendants<Sheet>(); 
       foreach (var sheet in sheets) 
       { 
        var worksheetPart = (WorksheetPart)workbookPart.GetPartById(sheet.Id); 
        var sharedStringPart = workbookPart.SharedStringTablePart; 

        string text; 
        var rows = worksheetPart.Worksheet.Descendants<Row>(); 
        foreach (var row in rows) 
        { 
         Console.WriteLine(); 
         int count = row.Elements<Cell>().Count(); 

         foreach (Cell theCell in row.Elements<Cell>()) 
         { 

          text = theCell.CellValue.InnerText; 

          double d = double.Parse(theCell.InnerText); 
          DateTime conv = DateTime.FromOADate(d).Date; 

          Console.Write(text + " "); 
          Console.Write(conv + " "); 

         } 
        } 
       } 
       Console.ReadLine(); 
      } 


     } 
    } 
}