Apache POI Excel - как настроить столбцы для расширения?

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

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

Я мог бы просто дважды щелкнуть по границе столбца в 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 text not not show first" находится в ячейке, но поскольку столбец не расширен, появляется только "Loooooooo".

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

Ответ 1

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

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

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

Ответ 2

Совет.. Чтобы сделать работу Auto size, вызов sheet.autoSizeColumn(columnNumber) должен быть сделан после, заполняя данные в excel.

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

Ответ 3

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

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);
            }
        }
    }
}

Ответ 4

Для Excel POI:

sheetName.autoSizeColumn(cellnum); 

Ответ 5

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

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

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

Ответ 6

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

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");

Проверьте выход и гайки:)

Ответ 7

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

IntStream.range(0, columnCount).forEach((columnIndex) -> sheet.autoSizeColumn(columnIndex));

Ответ 8

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

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

Ответ 9

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

CellStyle wrapCellStyle = new_workbook.createCellStyle();
                    wrapCellStyle.setWrapText(true);

Ответ 10

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