我有以下代码:
for (int r = 0; r < rows.Count(); r++)
{
var cells = rows[r].Elements<Cell>().ToList();
for (int c = 0; c < cells.Count(); c++)
{
SharedStringTablePart shareStringPart = spreadsheetDocument.WorkbookPart.GetPartsOfType<SharedStringTablePart>().First();
SharedStringItem[] items = shareStringPart.SharedStringTable.Elements<SharedStringItem>().ToArray();
int v = int.Parse(cells[c].CellValue.Text);
text = items[v].InnerText;
}
和以下excel文件:
但是此代码因
而崩溃我调试它,并查看第2行的每个单元格的CellValue
(我的v
变量)。
单元格[0] = 33
(它得到正确的值PQ-10387
)
单元格1 = 22
单元格[2] = 198
但是
cell [3] = 310
,此值与cell的值相同!我的代码有什么问题?
答案 0 :(得分:0)
发现,当单元格存储数字时,CellValue
具有单元格的值,而DataType
为空,否则,DataType
具有值,而CellValue
存储索引。因此,此代码可以正常工作:
for (int r = 0; r < rows.Count(); r++)
{
var cells = rows[r].Elements<Cell>().ToList();
for (int c = 0; c < cells.Count(); c++)
{
SharedStringTablePart shareStringPart = spreadsheetDocument.WorkbookPart.GetPartsOfType<SharedStringTablePart>().First();
SharedStringItem[] items = shareStringPart.SharedStringTable.Elements<SharedStringItem>().ToArray();
if (cells[c].DataType != null)
{
if (cells[c].CellValue != null)
{
int v = int.Parse(cells[c].CellValue.Text);
text = items[v].InnerText;
}
}
else
text = cells[c].CellValue?.Text;