【发布时间】:2016-01-21 17:16:47
【问题描述】:
我有一个 C# 应用程序,它读取在 Excel 2013 中创建的上传的 Excel 文件 (.xslx)
我使用 C# openxml 库读取每个单元格,将每个单元格放入每个行集合的单元格集合中。
代码可以正常工作,只是它没有正确读取格式化的 Excel 单元格值。
这是单元格在 excel 中的显示方式:
当 C# 应用程序读取该单元格时,我检查了该单元格的 DocumentFormat.OpenXml.Spreadsheet.Cell cell 属性,但没有一个单元格属性等于我想要的 May-15 的值。
我注意到 cell.DataType 和 cell.CellFormula 都是空的,所以它们不能用来确定格式。
cell.InnerText 的值为“42125”。如果我将 Excel 中的单元格格式更改为常规,则显示为 42125。
我正在使用this文章中的代码
这是我正在使用的代码 sn-p
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”?
【问题讨论】:
标签: c# excel-formula openxml openxml-sdk