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()
, если хотите расширить свою ячейку больше.