Я пользуюсь NPOI. Я читаю книгу Excel с двумя листами, которая действует как «шаблон» для книги результатов, которую я буду генерировать. Лист 0 пуст, за исключением некоторых строк заголовка, а лист 1 содержит несколько строк формул. Формулы обычно относятся к листу 0 и извлекают из него данные.
Я не могу писать прямо в книгу шаблонов, потому что мне пришлось бы перемещать строки в сторону, и это было бы ужасно быстро, поэтому в коде я создаю новую книгу результатов с двумя листами. На основе предварительно заданного файла конфигурации я заполняю лист 0 этой книги результатов данными, строка за строкой, клонируя стиль и формулы определенных строк из рабочей книги шаблона. Лист 0 оказывается заполненным данными, а лист 1 - это в основном ряд формул, скопированных и скорректированных относительно, обычно извлекающие данные из листа 0 с небольшим вычислением здесь или там. Все мои данные на листе 0 являются текстом и не могут быть интерпретированы как числа, даты и т. Д. Поэтому я установил типы ячеек данных как String.
Затем в коде я перебираю все ячейки на листе 1 и EvaluateInCell. Я делаю это для очевидной оценки формул, но также для того, чтобы удалить формулы и оставить скопированные / рассчитанные результаты. Это просто требование моей работы. Мы доставляем конечный результат, а не формулы. Сохраняю полученную книгу.
В целом все выглядит хорошо, за исключением случаев, когда у меня есть форматирование ячеек, форматирование, похоже, не применяется. Форматирование ЕСТЬ там, когда я получаю свойства форматирования ячеек в Excel. Например, у меня могут быть текстовые данные, которые являются датой и временем в моих данных, которые отображаются как: 7/7/2016 9:54:55 AM это то же самое, что и исходный текст данных, но на моем листе формул у меня есть пользовательский формат ячейки ггггммдд. И тем не менее, ячейка все еще отображается: 7/7/2016 9:54:55 AM. В Excel я делаю что-то вроде ручного редактирования значения, например, удаляю последнюю букву «M», повторно набираю «M» и нажимаю ввод, эта ячейка изменяется на желаемый формат и показывает: 20160707 Итак, форматирование ЕСТЬ, оно просто не применяется.
Я не хочу, чтобы мне приходилось вручную редактировать ячейки или что-либо делать после того, как мои клиенты открыли книгу в Excel. Я хочу, чтобы получившаяся книга открывалась с отформатированными значениями. Я пробовал несколько вещей, которые казались выстрелом в темноте, например:
this.ResultWorkbook.GetCreationHelper (). CreateFormulaEvaluator (). EvaluateAll (); ((XSSFWorkbook) this.ResultWorkbook) .SetForceFormulaRecalculation (true);
Но это не помогло. Есть предположения?
SetCellValue(DateTime value)
, а не как строку. - person Axel Richter   schedule 12.12.2017