Некоторое время я использую Apache POI для программного чтения существующих файлов Excel 2003. Теперь у меня есть новое требование - создавать целые файлы .xls в памяти (все еще используя Apache POI), а затем записывать их в файл в конце. Единственная проблема, стоящая на моем пути, - это обработка ячеек с датами.
Рассмотрим следующий код:
Date myDate = new Date();
HSSFCell myCell;
// code that assigns a cell from an HSSFSheet to 'myCell' would go here...
myCell.setCellValue(myDate);
Когда я записываю книгу, содержащую эту ячейку, в файл и открываю его в Excel, ячейка отображается в виде числа. Да, я понимаю, что Excel хранит свои «даты» как количество дней с 1 января 1900 года, и это то, что представляет собой число в ячейке.
ВОПРОС: Какие вызовы API я могу использовать в POI, чтобы сообщить ему, что я хочу, чтобы к моей ячейке даты применялся формат даты по умолчанию?
В идеале я хочу, чтобы ячейка электронной таблицы отображалась с тем же форматом даты по умолчанию, который Excel назначил бы ей, если бы пользователь вручную открыл электронную таблицу в Excel и ввел значение ячейки, которое Excel распознало как дату.
источник
BuiltinFormats
котором перечислены все стандартные форматы (а не только форматы даты), известные Excel. Я использую один из них в качестве параметраgetFormat()
метода, показанного в приведенном выше фрагменте.getCreationHelper()
это нужно? Я работаю с Mule прямо сейчас, чтобы создать выходной файл Excel, и я действительно смог использовать егоcreateDataFormat()
без помощника по созданию и сгенерировал файл Excel в моем тесте. Есть ли недостаток в том, чтобы не использовать его? Спасибо!mm/dd/yyyy
. Когда я использую любой другой формат, Excel отображает ошибкуFile error, some number formats may have been lost
, он отображаетDate
тип в excel. Я понятия не имею, как это можно исправить.Чтобы установить тип Excel по умолчанию Дата (по умолчанию локаль уровня ОС / -> т.е. xlsx будет выглядеть по-другому при открытии немецким или британским лицом / и помечен звездочкой, если вы выберете его в средстве выбора формата ячеек Excel), вам следует:
Я сделал это с помощью xlsx, и он работал нормально.
источник
Этот пример предназначен для работы с типами файлов .xlsx. Этот пример взят из страницы .jsp, используемой для создания электронной таблицы .xslx.
источник
Я пишу здесь свой ответ, потому что он может быть полезен другим читателям, у которых могут быть несколько иные требования, чем у спрашивающего здесь.
Готовлю шаблон .xlsx; все ячейки, которые будут заполнены датами, уже отформатированы как ячейки даты (с помощью Excel).
Я открываю шаблон .xlsx с помощью Apache POI, а затем просто записываю дату в ячейку, и все работает.
В приведенном ниже примере ячейка A1 уже отформатирована в Excel с использованием этого формата
[$-409]mmm yyyy
, а код Java используется только для заполнения ячейки.Когда открывается Excel, дата отображается правильно.
источник
Этот пример кода можно использовать для изменения формата даты. Здесь я хочу изменить с yyyy-MM-dd на dd-MM-yyyy. Вот
pos
положение столбца.источник
Чтобы узнать строку формата, используемую Excel, не угадывая ее: создайте файл Excel, напишите дату в ячейке A1 и отформатируйте ее по своему усмотрению. Затем запустите следующие строки:
Затем скопируйте и вставьте полученную строку, удалите обратную косую черту (например,
d/m/yy\ h\.mm;@
становитсяd/m/yy h.mm;@
) и используйте ее в коде http://poi.apache.org/spreadsheet/quick-guide.html#CreateDateCells :источник