我正在使用
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”。
如何配置它,以便当我打开电子表格时,该列已经展开???
提示:要使自动调整大小工作,应在将数据填充到 Excel 后
调用
sheet.autoSizeColumn(columnNumber)
。
在填充数据之前调用该方法,不会有任何效果。
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);
}
}
}
}
HSSFSheet summarySheet = wb.createSheet();
summarySheet.setColumnWidth(short column, short width);
此处参数为:sheet中的列数及其宽度 但是,宽度单位很小,例如你可以尝试 4000。
IntStream.range(0, columnCount).forEach(sheet::autoSizeColumn)
sheetName.autoSizeColumn(cellnum);
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");
检查输出并疯狂:)
for (int i = 0; i<53;i++) {
sheet.autoSizeColumn(i);
}
这是你的作业簿和工作表:
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet("YOUR Workshhet");
然后将数据添加到包含列和行的工作表中。将数据添加到工作表后,将以下代码写入
autoSizeColumn
宽度。
for (int columnIndex = 0; columnIndex < 15; columnIndex++) {
sheet.autoSizeColumn(columnIndex);
}
在这里,您可以添加工作表中的列数,而不是 15。
希望有人帮忙。
CellStyle wrapCellStyle = new_workbook.createCellStyle();
wrapCellStyle.setWrapText(true);
或给出括号内的列数 dataSheet.autoSizeColumn(单元格编号)
setColumnWidth()
。