先上代码!
// 声明一个工作薄
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet(forderBillNo);
// 设置表格默认列宽度为20个字节
sheet.setDefaultColumnWidth(20);
sheet.autoSizeColumn(1, true);
// 大标题合并单元格
CellRangeAddress cellRangeAddress = new CellRangeAddress(0, 0, 0, 18);
sheet.addMergedRegion(cellRangeAddress);
// 生成样式
HSSFCellStyle titleStyle = workbook.createCellStyle();
// 生成字体样式
HSSFFont fontTitle = workbook.createFont();
fontTitle.setFontHeightInPoints((short) 17); // 字体大小
fontTitle.setColor(HSSFColor.BLACK.index); // 字体颜色
fontTitle.setFontName("宋体"); // 字体
// 设置这些样式并将把字体应用到当前的样式
titleStyle.setAlignment(CellStyle.ALIGN_CENTER);
titleStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER);
titleStyle.setFont(fontTitle);
// 大标题
HSSFRow row = sheet.createRow(0);
row.setHeightInPoints(40);
HSSFCell cellTitle = row.createCell(0);
cellTitle.setCellStyle(titleStyle);
cellTitle.setCellValue("生产投料单");
这段代码完成了一个跨19列的大标题设置,接下来细说。
语法如下:
//起始行,结束行,起始列,结束列
sheet.AddMergedRegion(new CellRangeAddress(index["firstRow"], index["lastRow"], index["firstCol"], index["lastCol"]));
示例:从0行开始到0行结束 (第一行),从第0列到第18列(跨19列)。
CellRangeAddress cellRangeAddress = new CellRangeAddress(0, 0, 0, 18);
其实很简单,只是调用了个方法而已。
使用的时候会发现 CellRangeAddress 提示过期,其实只要导包的时候别导hssf 的就行。
https://blog.csdn.net/Alone_in_/article/details/100699482
---------------------------这段是在网上看到的,觉得有用就记录下来啦~~-----------------
自适应列宽度:
补充:要在写完所有单元格后再调用自适应这个方法。
sheet.autoSizeColumn(1);
sheet.autoSizeColumn(1, true);
这两种方式都是自适应列宽度,但是注意这个方法在后边的版本才提供,poi的版本不要太老。 注意:第一个方法在合并单元格的的单元格并不好使,必须用第二个方法。
sheet.setColumnWidth(m, “列名”.getBytes().length*2*256);
这个方法是计算字符串的长度,以便设置列宽,该方法在解决中文的问题上比较好,前面两种方法对中文不好好用。。。。
还有在自适应宽度的时候,有时候遇到单元格是公式单元格,自适应不起作用,那是因为单元格存的是公式,并不是真正的数据,解决方法:
HSSFFormulaEvaluator evaluator = new HSSFFormulaEvaluator(sheet.getWorkbook());
CellValue cell71Val = evaluator.evaluate(cell71);
cell71.setCellValue(cell71Val.getNumberValue());
将格式化后的数据再次set进去,就是真正的值了。