2016-08-01 77 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(); 
      } 


     } 
    } 
}