Проблема с NumberFormat в ExportAsFixedFormat
У меня есть таблица данных (результаты расчетов), которую пользователь должен иметь возможность экспортировать в разные форматы. я использую Interop.Excel
подготовить таблицу с данными и использовать данные и отформатировать их с использованием визуального форматирования (шрифты, цвета и т. д.) и NumberFormat
, Пример:
cellRange.NumberFormat = "#,##0";
Когда я сохраняю таблицу как файл Excel, все форматирование в порядке при экспорте в .xlsx и .xls:
excelWorkBook.SaveAs(exportFileName, Excel.XlFileFormat.xlOpenXMLWorkbook); // for .xlsx
excelWorkBook.SaveAs(exportFileName, Excel.XlFileFormat.xlExcel8); // for .xls
Я также хочу дать пользователю возможность экспортировать эту таблицу в .pdf и .xps из приложения без необходимости открывать файл Excel. Как я подготовил таблицы в Interop.Excel
Я попытался экспортировать ту же таблицу в эти форматы файлов:
excelWorkBook.ExportAsFixedFormat(Excel.XlFixedFormatType.xlTypePDF,exportFileName); // for .pdf
excelWorkBook.ExportAsFixedFormat(Excel.XlFixedFormatType.xlTypeXPS,exportFileName); // for .xps
Оба из них приводят к хорошим документам за исключением того, что все NumberFormats
теряются в результате длинных десятичных значений двойников. Это не подходит для краткого изложения данных клиента. (Цвета и шрифты остаются такими, как определено в .pdf и .xps.)
Я пробовал настройку .Style
а также .Styles
в "Number"
или т.п. Это не решает проблему.
Я также пытался защитить Range
клеток или excelWorkSheet
, Это тоже не решает проблему.
Кто-то предложил вызывать макрос / саб VBA через C#, но после некоторого изучения у меня сложилось впечатление, что это не очень прямой (или стабильный) путь.
Я ищу любую помощь в решении этой проблемы через Interop.Excel
или по-другому.
lucn
1 ответ
После некоторого тестирования становится ясно, что свойство, которое я назвал в своем комментарии, должно быть установлено на false
:Microsoft.Office.Interop.Excel.Application.ActiveWindow.DisplayFormulas = false;
Не ясно, почему это влияет на экспорт в другие форматы, такие как *.pdf
но это явно так и настройка .DisplayFormulas = false
решает проблему.
Надеюсь, это кому-нибудь поможет.