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


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

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

9 75

9 ответов:

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

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

см. Этот пост для получения дополнительной информации проблема в подгонке размера ячейки excel к размеру содержимого при использовании Apache poi

Совет : сделать автоматический размер работы , вызов sheet.autoSizeColumn(columnNumber) должно быть после заполнение данных в excel.

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

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

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(0);
            Iterator<Cell> cellIterator = row.cellIterator();
            while (cellIterator.hasNext()) {
                Cell cell = cellIterator.next();
                int columnIndex = cell.getColumnIndex();
                sheet.autoSizeColumn(columnIndex);
            }
        }
    }
}

для Excel POI:

sheetName.autoSizeColumn(cellnum); 

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

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

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

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

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

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

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

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

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

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

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