openXml c# при получение текстового значения из ячейки выдается число(похоже на кодировку)
недавно появилась необходимось загрузки данных из эксель файла в базу данных с предварительным парсингом, данные цифрового формата загружаются без проблем и отображаются как надо, а вот текстовые не В зависимости от языка выдаются в виде чисел, два дня убил на поиск решения, ничего нет, пробовал другие библиотеки как closedXml, там еще больше проблем((
using (var document = SpreadsheetDocument.Open(ExelName, false))
{
WorkbookPart workbookPart = document.WorkbookPart ?? document.AddWorkbookPart();
WorksheetPart worksheetPart = workbookPart.WorksheetParts.First();
SheetData sheetData = worksheetPart.Worksheet.Elements<SheetData>().First();
foreach (Row r in sheetData.Elements<Row>())
{
List<Cell> cells = r.Elements<Cell>().ToList();
int post_index = int.Parse(cells[0].InnerText);
string city = cells[1].CellValue.InnerText;
string name_street = cells[2].CellValue.Text;
string num_house = cells[3].CellValue.Text;
string num_flat = cells[4].CellValue.Text;
int hot = int.Parse(cells[5].CellValue.Text);
int cold = int.Parse(cells[6].CellValue.Text);
Console.WriteLine($"{post_index},{city},{name_street},{num_house},{num_flat},{hot},{cold}");
//данные в эксель строках - вв || вв || аа || йй || а || а || а
//возвращаемые значения - 4,4,5,6,3,3,3
}
}
}
решил с помощью следующего метода на версии старше чем 3:
private static string GetCellValue(SpreadsheetDocument doc, Cell cell)
{
string value = cell.CellValue.InnerText;
if (cell.DataType != null && cell.DataType.Value ==
CellValues.SharedString)
{
return doc.WorkbookPart.SharedStringTablePart.SharedStringTable.ChildElements.GetItem(int.Parse(value)).InnerText;
}
return value;
}