如果整数,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)上面的代码没有处理的其他类型。日期特别尴尬。
我正在使用此代码读取单元格值;
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)上面的代码没有处理的其他类型。日期特别尴尬。