Apache POI Excel - как настроить расширение столбцов? - PullRequest
86 голосов
/ 06 января 2011

Я использую Apache POI API для генерации excel spreadsheet для вывода некоторых данных.

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

Я мог бы просто дважды щелкнуть границу столбца в Excel, чтобы развернуть или перетащить границу, чтобы настроить ширину столбца, но может быть более 20 столбцов, и я не хочу делать это вручную каждый раз, когда открываю электронную таблицу :(

Я узнал (хотя это может быть неправильный метод) groupRow() и setColumnGroupCollapsed() могли бы сделать трюк, но не повезло. Может быть, я использую это неправильно.

Пример кода

        Workbook wb = new HSSFWorkbook();
        CreationHelper createHelper = wb.getCreationHelper();
        //create sheet
        Sheet sheet = wb.createSheet("masatoSheet");

        //not really working yet.... :(
        //set group for expand/collapse
        //sheet.groupRow(0, 10); //just random fromRow toRow argument values...
        //sheet.setColumnGroupCollapsed(0, true);

        //create row
        Row row = sheet.createRow((short)0);
        //put a cell in the row and store long text data
        row.createCell(0).setCellValue("Loooooooong text not to show up first");

Когда создается эта электронная таблица, в ячейке находится строка «Текст Looooooong не отображаться первым», но поскольку столбец не раскрывается, отображается только «Loooooooo».

Как я могу настроить его таким образом, чтобы при открытии электронной таблицы столбец уже расширялся ???

Ответы [ 10 ]

153 голосов
/ 06 января 2011

После того, как вы добавили все свои данные на лист, вы можете вызвать autoSizeColumn(int column) на своем листе, чтобы автоматически подогнать столбцы к нужному размеру

Вот ссылка на API .

См. Этот пост для получения дополнительной ссылки Проблема при подборе размера ячейки Excel к размеру содержимого при использовании apache poi

40 голосов
/ 13 марта 2012

Подсказка: Чтобы заставить работать Авторазмер, необходимо сделать sheet.autoSizeColumn(columnNumber) вызов после заполнения данных в excel.

Вызов метода передзаполнение данных, не будет иметь никакого эффекта.

30 голосов
/ 10 февраля 2016

Если вы хотите автоматически изменить размер всех столбцов в книге, вот метод, который может быть полезен:

public void autoSizeColumns(Workbook workbook) {
    int numberOfSheets = workbook.getNumberOfSheets();
    for (int i = 0; i < numberOfSheets; i++) {
        Sheet sheet = workbook.getSheetAt(i);
        if (sheet.getPhysicalNumberOfRows() > 0) {
            Row row = sheet.getRow(sheet.getFirstRowNum());
            Iterator<Cell> cellIterator = row.cellIterator();
            while (cellIterator.hasNext()) {
                Cell cell = cellIterator.next();
                int columnIndex = cell.getColumnIndex();
                sheet.autoSizeColumn(columnIndex);
            }
        }
    }
}
8 голосов
/ 02 апреля 2014

Для Excel POI:

sheetName.autoSizeColumn(cellnum); 
8 голосов
/ 06 января 2011

Вы можете попробовать что-то вроде этого:

HSSFSheet summarySheet = wb.createSheet();
summarySheet.setColumnWidth(short column, short width);

Вот параметры: номер столбца в листе и его ширина. Но единицы измерения ширины довольно малы, например, вы можете попробовать 4000.

4 голосов
/ 23 сентября 2014

пример кода ниже

HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet("your sheet name");
HSSFRow row = sheet.createRow(0);

cell = row.createCell(0);
cell.setCellValue("A BIG NAME WITH AUTO SIZE FEATURE ENABLED");

// это важно

sheet.autoSizeColumn(0);

// аргумент должен быть номером ячейки

cell = row.createCell(1);
cell.setCellValue("a big name without auto size feature enabled");

Проверьте вывод и сходите с ума:)

1 голос
/ 13 декабря 2017

Если вы знаете количество ваших столбцов (например, оно равно списку коллекций). Вы можете просто использовать этот вкладыш для настройки всех столбцов одного листа (если вы используете хотя бы Java 8):

IntStream.range(0, columnCount).forEach((columnIndex) -> sheet.autoSizeColumn(columnIndex));
0 голосов
/ 14 декабря 2018

Вы также можете обернуть текст.Пример кода PFB:

CellStyle wrapCellStyle = new_workbook.createCellStyle();
                    wrapCellStyle.setWrapText(true);
0 голосов
/ 08 ноября 2017

Это очень просто, используйте этот однострочный код dataSheet.autoSizeColumn (0)

или укажите номер столбца в скобках dataSheet.autoSizeColumn (номер ячейки)

0 голосов
/ 06 октября 2016

Вы можете использовать setColumnWidth(), если хотите расширить свою ячейку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...