Apache POI для Excel: установка типа ячейки «текст» для всего столбца - PullRequest
9 голосов
/ 28 июня 2011

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

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

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

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

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

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

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

Ответы [ 4 ]

19 голосов
/ 25 мая 2013

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

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

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

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

11 голосов
/ 01 августа 2011

Поможет ли * ?

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

0 голосов
/ 24 мая 2018

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

Например:

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

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

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

0 голосов
/ 03 апреля 2015

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

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

метод с!

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

methodend

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

...