@Benelli

OpenXML SDK: как получить форматированное значение ячейки?

Как можно получить форматированное (с примененным 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.


Я гуглю на эту тему уже день, но пока не нашел простого решения. И это очень странно, мне казалось, что это вполне распространенная проблема будет.
  • Вопрос задан
  • 3196 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы