OpenXml和奇怪的行为

时间:2018-11-25 14:59:28

标签: c# excel cell openxml

我有以下代码:

            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文件:

enter image description here

但是此代码因

而崩溃

我调试它,并查看第2行的每个单元格的CellValue(我的v变量)。

单元格[0] = 33(它得到正确的值PQ-10387

单元格1 = 22

单元格[2] = 198

但是

cell [3] = 310,此值与cell的值相同!我的代码有什么问题?

1 个答案:

答案 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;