Как можно получить форматированное (с примененным number format) значение ячейки из XLSX-файла? Иными словаами, такое значение, как его бы показал сам Excel?
Я понимаю, что готовой такой функции нет и скорее всего надо действовать в два этапа — получить строку формата и отформатировать значение с ее использованием.
Ну вот при помощи этого куска кода можно получить объект CellFormat, который будет содержать NumberFormatId:
CellFormat cellFormat =<br/>
(CellFormat) document.WorkbookPart.WorkbookStylesPart.Stylesheet.CellFormats.ElementAt(cell.StyleIndex);
Но как теперь на основе ID формата получить строку формата, если по спецификации первые 160 форматов — pre-defined (стандартные) и явно в документе не представлены? Не хардкодить же все эти 160 стандартных форматных строк в программе?
Тут я нашел сниппет, как можно получить сразу уже форматированное значение:
Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application();<br/>
<br/>
value = excelApp.WorksheetFunction.Text(value, currentNumberingFormat.FormatCode.Value);<br/>
Но это решение у меня не срабатывает, код кидает исключение. Плюс Office Automation, насколько я знаю, ставится вместе с офисом, а на сервере его не будет.
И потом, я хотел бы остаться в рамках OpenXML SDK.
Я гуглю на эту тему уже день, но пока не нашел простого решения. И это очень странно, мне казалось, что это вполне распространенная проблема будет.