Apache POI для Excel: установка текстового типа ячейки для всего столбца

Мне нужно сгенерировать файл .xls (Excel) с помощью библиотеки Java Apache POI для электронных таблиц.

Файл будет содержать список телефонных номеров в столбце A в формате «0221....» или «+49221...», поэтому Excel по умолчанию интерпретирует их как числовые ячейки. Это плохо, потому что ведущие 0 или + будут обрезаны.

Чтобы решить эту проблему, я могу использовать cell.setCellType(Cell.CELL_TYPE_STRING), который отлично работает, но только для определенных ячеек, для которых я его установил.

Как применить эту настройку ко всей колонке (т.е. даже ко всем остальным ячейкам, куда пользователь будет вводить дополнительные номера телефонов)?

В Excel это возможно: выбрать весь столбец и применить тип ячейки (настройка сохраняется при сохранении/загрузке файла).

Но я не могу найти правильный метод для POI.

  • Сначала я предположил, что это должно быть что-то вроде sheet.setDefaultCellType(int colNum). Но я не могу найти ничего подобного (наверное, я просто слепой? Есть много подобные методы в библиотеке для применения стилей текста, таких как "выравнивание по центру" и т. д.)
  • Затем я подумал: может быть, его можно применить только к NamedRange или к чему-то еще. похоже, но мне не удалось понять, как это работает...

person Chris Lercher    schedule 28.06.2011    source источник


Ответы (4)


Поможет ли это?

Создав формат данных с символом @ и используя его в объекте CellStyle, который затем передается методу setDefaultColumnStyle(), можно было установить тип данных столбца по умолчанию, в данном случае текст. Я не экспериментировал дальше, но подозреваю, что можно было бы сделать что-то подобное с другими объектами стиля, чтобы установить тип по умолчанию в числовой или даже в настраиваемый формат, такой как валюта.

person Vlad    schedule 01.08.2011
comment
Выглядит хорошо! Как только я вернусь к проекту, я попробую это решение. Спасибо! - person Chris Lercher; 01.08.2011
comment
Я сделал то же самое. var cllstyl = this.Workbook.CreateCellStyle(); var workbook = новый HSSFWorkbook(); var currDataFormat = workbook.CreateDataFormat(); cllstyl.DataFormat = currDataFormat.GetFormat(@); лист.SetDefaultColumnStyle(1, cllstyl); Но он не показывает текстовый формат, вместо этого показывает дату. Пожалуйста помоги мне с этим. - person Emma Thapa; 03.04.2017

Вот пример кода, вдохновленный ответом Влада:

DataFormat fmt = workbook.createDataFormat();
CellStyle textStyle = workbook.createCellStyle();
textStyle.setDataFormat(fmt.getFormat("@"));
worksheet.setDefaultColumnStyle(0, textStyle);

Приведенный выше код устанавливает стиль по умолчанию для первого столбца worksheet в TEXT.

Спасибо, Влад!

person jahroy    schedule 25.05.2013

Лучший способ установить его сейчас с помощью POI — использовать класс BuiltinFormats.

Например:

Чтобы преобразовать тип столбца в числовой

 CellStyle numericStyle = workbook.createCellStyle(); 
 numericStyle.setDataFormat(BuiltinFormats.getBuiltinFormat(2)); // 2 For Number 
 worksheet.setDefaultColumnStyle(colId, numericStyle);

Полный список форматов BuiltinFormats можно увидеть здесь< /а>

person Antho Christen    schedule 24.05.2018

Влад: Это решило большую часть проблемы. Я обнаружил, что все пустые строки были отформатированы так, как я хотел. Однако строки, в которых у меня были начальные нули, выглядели и работали нормально; однако, если мне пришлось изменить ранее существовавшее значение на другое значение, начинающееся с нуля, нули исчезли. Поэтому я рекомендую добавить код, когда вы создаете значение в ячейке, чтобы сбросить setCellStyle к тексту. вот несколько фрагментов: метод public Cell createCell(Row r!, ячейка BBjNumber, значение BBjString!)

c!=#this!.createCell(r!, cell)
c!.setCellValue(value!)
c!.setCellStyle(#text_format!)

методрет с!

#text_format! = #wb!.createCellStyle()
#text_format!.setDataFormat(#format!.getFormat("@"))

методконец

это может помочь некоторым другим поиском начальных нулей. Спасибо за публикацию. Алекс

person alex robkin    schedule 03.04.2015