如果整数,OpenXML 读取错误的单元格值

OpenXML reading wrong cell value if integer

我正在使用此代码读取单元格值;

            var cell = row.Elements<Cell>().FirstOrDefault();
            var stringId = Convert.ToInt32(cell.InnerText);

            var cellValue = workbookPart.SharedStringTablePart.SharedStringTable
                .Elements<SharedStringItem>().ElementAt(stringId).InnerText;

我正在读取行的第一个单元格并获取值。我的excel是这样的

     A    B
 1   x    name1
 2   y    name2
 3   1    name3

所以当行为3时,stringId值设置为1,cellValue设置为“x”,但应该是1.

您需要检查单元格的 DataType,因为“1”存储为实际数字,而不是共享字符串 table 中的字符串。

var cell = row.Elements<Cell>().FirstOrDefault();
string cellValue = null;

if (cell.DataType != null && cell.DataType == CellValues.SharedString)
{
    //it's a shared string so use the cell inner text as the index into the 
    //shared strings table
    var stringId = Convert.ToInt32(cell.InnerText);
    cellValue = workbookPart.SharedStringTablePart.SharedStringTable
        .Elements<SharedStringItem>().ElementAt(stringId).InnerText;
}
else
{
    //it's NOT a shared string, use the value directly
    cellValue = cell.InnerText;
}

有几点需要注意: 1) 如果没有提供,默认类型是 Number 2)上面的代码没有处理的其他类型。日期特别尴尬。