在 C# documentformat.openxml 中从整数 .xslx 文档的 excel 单元格中检索数据
Retrieving data from excel cell that is integer .xslx document in C# documentformat.openxml
遍历我的电子表格文档中的行和单元格,但如果单元格是数字(字符串工作正常)则无法从单元格中检索值。
例如:
// ...
List<Row> rows = sheetData.Elements<Row>().Where(r => r.Elements<Cell>().Any(ce => ce.DataType != null)).ToList();
foreach (Row row in rows) {
foreach (Cell cell in row.Elements<Cell>()) {
int id = int32.Parse(cell.InnerText);
var value = workbookPart.SharedStringTablePart.SharedStringTable.Elements<SharedStringItem>().ElementAt(id);
Console.WriteLine(value); // the cell data
// cell data is a string = fine.
// cell data is a number = returns cell data from row 1, cell 1.
}
}
当单元格是数字而非字符串时,值等于电子表格的第一个单元格 (0, 0)。
我在从单元格中检索数字时是否遗漏了什么?
代码又快又脏,但有效:
if (cell.DataType == CellValues.SharedString && cell.DataType != null) {
value = workbookPart.SharedStringTablePart.SharedStringTable
.Elements<SharedStringItem>()
.ElementAt(Convert.ToInt32(cell.InnerText)).InnerText;
} else {
value = cell.InnerText.Replace(".", string.Empty);
}
遍历我的电子表格文档中的行和单元格,但如果单元格是数字(字符串工作正常)则无法从单元格中检索值。
例如:
// ...
List<Row> rows = sheetData.Elements<Row>().Where(r => r.Elements<Cell>().Any(ce => ce.DataType != null)).ToList();
foreach (Row row in rows) {
foreach (Cell cell in row.Elements<Cell>()) {
int id = int32.Parse(cell.InnerText);
var value = workbookPart.SharedStringTablePart.SharedStringTable.Elements<SharedStringItem>().ElementAt(id);
Console.WriteLine(value); // the cell data
// cell data is a string = fine.
// cell data is a number = returns cell data from row 1, cell 1.
}
}
当单元格是数字而非字符串时,值等于电子表格的第一个单元格 (0, 0)。
我在从单元格中检索数字时是否遗漏了什么?
代码又快又脏,但有效:
if (cell.DataType == CellValues.SharedString && cell.DataType != null) {
value = workbookPart.SharedStringTablePart.SharedStringTable
.Elements<SharedStringItem>()
.ElementAt(Convert.ToInt32(cell.InnerText)).InnerText;
} else {
value = cell.InnerText.Replace(".", string.Empty);
}