2016-01-21 140 views
1

我有一個C#應用程序讀取上傳Excel文件(.xslx)在Excel中創建2013如何獲得openxml.spreadsheet.cell屏幕顯示值

我讀每個單元將每個細胞進入細胞的集合每個使用C#openxml庫的行的集合。

該代碼正常工作,但它不能正確讀取格式化的Excel單元格值。

這裏是細胞是如何顯示在Excel中:

enter image description here

和fromatting: enter image description here

我已經研究過該小區的DocumentFormat.OpenXml.Spreadsheet.Cell cell屬性時,C#應用程序讀取它,但沒有的單元格屬性等於我想要的May-15的值。

我注意到cell.DataType和cell.CellFormula都是null,所以它們不能用來確定格式。

cell.InnerText值是「42125」。如果我更改在Excel中一般細胞格式,那麼它顯示爲42125.

我使用從this文章

代碼在這裏是我使用

for (var i = 0; i < rows.Count; i++) 
{ 
    var dataRow = new List<string>(); 
    data.DataRows.Add(dataRow); 
    var row = rows[i]; 
    var cellEnumerator = GetExcelCellEnumerator(row); 
    while (cellEnumerator.MoveNext()) 
    { 
     var cell = cellEnumerator.Current; //return the current DocumentFormat.OpenXml.Spreadsheet.Cell 
     var text = ReadExcelCell(cell, workbookPart).Trim(); 
     dataRow.Add(text); 
    } 
} 

的代碼片段。

private string ReadExcelCell(Cell cell, WorkbookPart workbookPart) 
{ 
    var cellValue = cell.CellValue; 
    var text = (cellValue == null) ? cell.InnerText : cellValue.Text; 
    if ((cell.DataType != null) && (cell.DataType == CellValues.SharedString)) 
    { 
     text = workbookPart.SharedStringTablePart.SharedStringTable 
      .Elements<SharedStringItem>().ElementAt(
       Convert.ToInt32(cell.CellValue.Text)).InnerText; 
    } 

    return (text ?? string.Empty).Trim(); 
} 

問:

  1. 我怎麼能讀cell.InnerText五月-15的顯示值?

  2. 如果格式爲mmm-y,是否可以使用標準C#字符串/日期格式將「May-15」轉換爲「42125」或「42125」爲「May-15」

回答

1

回答你的第二個問題:

如何42125轉換爲月 - 15

var myval = String.Format("{0:MMM-yy}", DateTime.FromOADate(42125)); 

轉換,可能會-15到42125

var myval = DateTime.ParseExact("May-15", "MMM-yy", System.Globalization.CultureInfo.InvariantCulture).ToOADate();