我有一个C#应用程序,用于读取在Excel 2013中创建的上载的Excel文件(.xslx)
我读了每个单元格,使用C#openxml库将每个单元格放入每个行集合的单元格集合中。
代码正常工作,但它没有正确读取格式化的excel单元格值。
以下是单元格在excel中的显示方式:
当C#应用程序读取它时,我检查了该单元格的DocumentFormat.OpenXml.Spreadsheet.Cell cell
属性,但没有一个单元格属性等于我想要的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();
}
问题:
如何阅读5月15日的cell.InnerText的显示值?
如果格式为mmm-y,是否可以使用标准C#字符串/日期格式将“May-15”转换为“42125”或“42125”为“May-15”?
答案 0 :(得分:1)
第二个问题的答案:
如何将42125转换为May-15
var myval = String.Format("{0:MMM-yy}", DateTime.FromOADate(42125));
将5月15日转换为42125
var myval = DateTime.ParseExact("May-15", "MMM-yy", System.Globalization.CultureInfo.InvariantCulture).ToOADate();