OpenXml 和奇怪的行为

OpenXml and strange behavior

我有以下代码:

            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 变量)。

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

细胞1 = 22

细胞[2] = 198

但是

cell[3] = 310 和这个值是同一个cell的值!我的代码有什么问题?

发现,当cell存储数字时,CellValue有cell的值,DataType为null,否则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;