В настоящее время я использую NPOI для генерации файлов Excel на основе базы данных из моего приложения asp.net mvc. Я почти закончил с кодом, за исключением одной небольшой проблемы, которую я получаю, когда пытаюсь написать Dates to Excel.Проблема с записью даты в файл Excel с использованием NPOI
В базе данных (MS SQL Server) Я дата сохранен как 41883, 41913 и т.д. ... который в C# можно преобразовать в объект DataTime с помощью
DateTime dt = DateTime.FromOADate(Convert.ToDouble(41883));
код, который я использую, чтобы написать Дата в Excel выглядит лежать так:
var cell = excelRow.CreateCell(columnIndex);
IDataFormat format = workbook.CreateDataFormat();
short dateFormat = format.GetFormat("dd/MM/yyyy");
cell.SetCellValue(DateTime.FromOADate(Convert.ToDouble(dbDateValue)));
ICellStyle cellStyle = workbook.CreateCellStyle();
cellStyle.DataFormat = dateFormat;
cell.CellStyle = cellStyle;
это всего лишь пример моего кода (кусок, который делает дату написания части). Проблема с этим фрагментом кода заключается в том, что только часть ячеек даты фактически отформатирована как дата, для всех остальных я все еще вижу значения, как в базе данных 41883, 41913 и т. Д., Которые, конечно, я могу выбрать и применить короткую дату/Форматирование даты из Excel (но я не хочу этого).
Может ли кто-нибудь сообщить мне, почему такое поведение может появиться (форматирование работает только для части ячеек) ... Я даже попытался использовать HSSFDataFormat.GetBuiltinFormat («Дата»), но ни одна из ячеек не была отформатирована в в этом случае.
Изображение выше объясняет лучше мой вопрос ... когда я выбираю первые ячейки в первой колонке я вижу ячейка отформатирована как «Custom» ... для всех остальных значений, которые не являются отформатирован это генерал. Как только я выбираю ячейки, я могу отформатировать его как дату из Excel без каких-либо проблем. Это странно, поскольку один и тот же код выполняется для всех ячеек даты, но только некоторые получают правильное форматирование ...
Получил именно эту проблему. Интересно, есть ли решение ... пока ... –
Хорошо, я понял, что случилось. Вероятно, вы создаете новый стиль ячейки для каждой ячейки. Это заставляет его как-то за счет большого количества одинаковых стилей ячеек. Вам нужно просто создать один стиль ячейки для всей книги, а затем передать этот элемент «ICellStyle» в свойство CellStyle ячейки. –
@StephenChung благодарит за вашу резкую оценку ... Я просто изменил весь свой код, чтобы использовать гораздо меньше CellStyles (создавая его первый тип, а затем повторно его использовать). Вы должны поместить этот комментарий в качестве ответа. – Romias