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;
我有以下代码:
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;