如何获取openxml.spreadsheet.cell屏幕显示值
How to get the openxml.spreadsheet.cell screen display value
我有一个 C# 应用程序,它读取在 Excel 2013
中创建的上传的 excel 文件 (.xslx)
我使用 C# openxml 库读取每个单元格,将每个单元格放入每个行集合的单元格集合中。
除了不能正确读取格式化的 excel 单元格值外,代码工作正常。
单元格在 excel 中的显示方式如下:
和来自攻击:
当 C# 应用程序读取该单元格时,我检查了该单元格的 DocumentFormat.OpenXml.Spreadsheet.Cell cell
属性,但是单元格属性的 none 等于我想要的 May-15 的值。
我注意到 cell.DataType 和 cell.CellFormula 都是空的,所以它们不能用来确定格式。
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的显示值?
如果格式为嗯嗯?
第二个问题的答案:
如何将 42125 转换为 May-15
var myval = String.Format("{0:MMM-yy}", DateTime.FromOADate(42125));
将 May-15 转换为 42125
var myval = DateTime.ParseExact("May-15", "MMM-yy", System.Globalization.CultureInfo.InvariantCulture).ToOADate();
我有一个 C# 应用程序,它读取在 Excel 2013
中创建的上传的 excel 文件 (.xslx)我使用 C# openxml 库读取每个单元格,将每个单元格放入每个行集合的单元格集合中。
除了不能正确读取格式化的 excel 单元格值外,代码工作正常。
单元格在 excel 中的显示方式如下:
和来自攻击:
当 C# 应用程序读取该单元格时,我检查了该单元格的 DocumentFormat.OpenXml.Spreadsheet.Cell cell
属性,但是单元格属性的 none 等于我想要的 May-15 的值。
我注意到 cell.DataType 和 cell.CellFormula 都是空的,所以它们不能用来确定格式。
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的显示值?
如果格式为嗯嗯?
第二个问题的答案:
如何将 42125 转换为 May-15
var myval = String.Format("{0:MMM-yy}", DateTime.FromOADate(42125));
将 May-15 转换为 42125
var myval = DateTime.ParseExact("May-15", "MMM-yy", System.Globalization.CultureInfo.InvariantCulture).ToOADate();