目录
Java Excel POI 实现合并单元格以及列自适应宽度
java POI 实现excel表格下拉框选择一个值,另一个单元格自动填充内容
POI 导出Excel
1. 合并单元格
POI是apache提供的一个读写Excel文档的开源组件,在操作excel时常要合并单元格,合并单元格的方法是:
public CellRangeAddress(int firstRow, int lastRow, int firstCol, int lastCol)
/*
说明:
1, // 起始行
1, // 结束行
0, // 起始列
2 // 结束列
*/
sheet.addMergedRegion(new CellRangeAddress(1, 1, 0, 2));
2. 自适应列宽度:
sheet.autoSizeColumn(i); // i:列索引
sheet.autoSizeColumn(i, true);
这两种方式都是自适应列宽度,但是注意这个方法在后边的版本才提供,poi的版本不要太老。
注意:第一个方法在合并单元格的的单元格并不好使,必须用第二个方法。
2.2 强调的是设置自适应列宽:
方法一:
sheet.autoSizeColumn(i);
// 上面的属性,只能解决英文、数字列宽自适应,如果该列为中文,会出现列宽不足现象。
1. sheet.autoSizeColumn(i);//先设置自动列宽
2. sheet.setColumnWidth(i, sheet.getColumnWidth(i)*17/10);
// 设置列宽为自动列宽的1.7倍(当然不是严格的1.7倍,int的除法恕不再讨论),这个1.6左右也可以,这是本人测试的经验值*
方法二:
可通过手动设置列宽解决
首先通过value.getBytes().length方法对比找到该列数据最大长度
通过sheet.setColumnWidth(i, cellLength*2*256);手动设置列宽。
长度乘以2是为了解决纯数字列宽度不足会显示科学计数法问题,乘以256得到的数据才是excel真实列宽。
案例参考:
if (autoSize) {
// Autosize columns
for (int i=0; i < maxColumns && i < rowsetBody[0].length; i++) {
workbookSheet.autoSizeColumn(i);
//设置中文列宽自适应
int curColWidth = workbookSheet.getColumnWidth(i)/256;
for (int rowNum = 0; rowNum < workbookSheet.getLastRowNum(); rowNum++) {
Row currentRow;
//当前行未被使用过
if (workbookSheet.getRow(rowNum) == null) {
currentRow = workbookSheet.createRow(rowNum);
} else {
currentRow = workbookSheet.getRow(rowNum);
}
if (currentRow.getCell(i) != null) {
Cell currentCell = currentRow.getCell(i);
if (currentCell.getCellType() == HSSFCell.CELL_TYPE_STRING) {
int length = currentCell.getStringCellValue().getBytes().length;
if (curColWidth < length) {
curColWidth = length;
}
}
}
}
workbookSheet.setColumnWidth(i,curColWidth*256);
}
}
3. 设置列宽
3.1 字符串
sheet.setColumnWidth(m, “列名”.getBytes().length*2*256);
注:这个方法是计算字符串的长度,以便设置列宽,该方法在解决中文的问题上比较好,前面两种方法对中文不好好用。。。。
3.2 单元格是公式单元格(单元格存的是公式)
还有在自适应宽度的时候,有时候遇到单元格是公式单元格,自适应不起作用,那是因为单元格存的是公式,并不是真正的数据,解决方法:
HSSFFormulaEvaluator evaluator = new HSSFFormulaEvaluator(sheet.getWorkbook());
CellValue cell71Val = evaluator.evaluate(cell71);
cell71.setCellValue(cell71Val.getNumberValue());
将格式化后的数据再次set进去,就是真正的值了。
4. POI IndexedColors 所有颜色索引
参考推荐:
Java HSSFWorkbook 生成 excel
POI 简易帮助文档系列--给Excel设置样式
Java Excel POI 实现合并单元格以及列自适应宽度
POI 导出Excel 并且根据内容设置列宽自适应
java POI 实现excel表格下拉框选择一个值,另一个单元格自动填充内容