2016-01-21 86 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();