OpenXML читает неправильное значение ячейки, если целое число - PullRequest
0 голосов
/ 13 ноября 2018

Я читаю значения ячеек, используя этот код;

            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.

1 Ответ

0 голосов
/ 14 ноября 2018

Вам необходимо проверить DataType ячейки, так как «1» хранится как фактическое число, а не строка в таблице общих строк.

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) Тип по умолчанию, если он не указан, - это Номер 2) Существуют другие типы, которые не обрабатываются приведенным выше кодом.Даты особенно неловко.

...