Я использую 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».
Как я могу настроить его так, чтобы при открытии таблицы столбец был уже развернут ???
Ответы:
После того, как вы добавили все свои данные на лист, вы можете вызвать
autoSizeColumn(int column)
свой лист, чтобы автоматически подогнать столбцы до нужного размера.Вот ссылка на API .
См. Этот пост для получения дополнительной информации. Проблема с подгонкой размера ячейки Excel к размеру содержимого при использовании apache poi.
источник
autoSizeColumn
он плохо масштабируется и будет очень медленным, если у вас много строк. Мне пришлось немного взломать и сделать что-то похожее на то, что было предложено в этом вопросе .Совет: чтобы автоматический размер работал, вызов
sheet.autoSizeColumn(columnNumber)
должен быть сделан после заполнения данных в Excel.Вызов метода перед заполнением данных не даст никакого эффекта.
источник
(5 until row.lastCellNum).forEach { colNum -> val columnWidth = (row.getCell(colNum).toString().length * 0.44 + 2.24) * 768 reportSheet.setColumnWidth(colNum, columnWidth.toInt()) }
Если вы хотите автоматически изменить размер всех столбцов в книге, вот метод, который может быть полезен:
источник
NullPointerException
вrow.cellIterator()
. Это потому, что у меня нет ценности в одной из ячеек?Вы можете попробовать что-то вроде этого:
Вот параметры: номер столбца на листе и его ширина. Но единицы ширины довольно маленькие, вы можете попробовать, например, 4000.
источник
Для Excel POI:
источник
пример кода ниже
// это очень важно
// аргумент должен быть номером ячейки
Проверяем вывод и сходи с ума :)
источник
Если вы знаете количество ваших столбцов (например, оно равно списку коллекций). Вы можете просто использовать этот лайнер для настройки всех столбцов на одном листе (если вы используете хотя бы java 8):
источник
Я использую простое решение ниже:
Это ваша рабочая тетрадь и лист:
затем добавьте данные на свой лист со столбцами и строками. После добавления данных на лист напишите следующий код для
autoSizeColumn
ширины.Здесь вместо 15 вы добавляете количество столбцов на листе.
Надеюсь, кому-то это поможет.
источник
Это очень просто, используйте этот однострочный код dataSheet.autoSizeColumn (0)
или укажите номер столбца в скобках dataSheet.autoSizeColumn (номер ячейки)
источник
Вы также можете обернуть текст. Пример кода PFB:
источник
Вы можете использовать,
setColumnWidth()
если хотите еще больше расширить свою ячейку.источник