最近几天接了个导出功能的活,而且比较复杂,经常跨行跨列的,刚开始写一头雾水,度娘一下好多的都不可以用在这里详细的给大家讲解一下,写的不好请谅解
// 创建一个Excel文件
Workbook workbook = new SXSSFWorkbook();
Sheet hsheet = workbook.createSheet(Name());// 创建一个Excel的Sheet
hsheet.setColumnWidth(0, 6500);//列宽
hsheet.setColumnWidth(1, 6500);//列宽
hsheet.setColumnWidth(2, 8500);//列宽
hsheet.setColumnWidth(3, 10000);//列宽
hsheet.setColumnWidth(4, 10000);//列宽
//创建样式
CellStyle cellStyle = workbook.createCellStyle();
//设置字体
Font font = workbook.createFont();
font.setFontName("微软雅黑");
font.setFontHeightInPoints((short) 12);
cellStyle .setFont(font ); //引用字体样式
cellStyle .setAlignment(HorizontalAlignment.CENTER);//设置居中 为水平居中
cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);//设置居中 为上下居中
cellStyle.setWrapText(true);//设置自动换行
cellStyle.setBorderBottom(BorderStyle.THIN); //下边框
cellStyle.setBorderLeft(BorderStyle.THIN);//左边框
cellStyle.setBorderTop(BorderStyle.THIN);//上边框
cellStyle.setBorderRight(BorderStyle.THIN);//右边框
Row rows = hsheet.createRow(0);//创建行
Cell[] cell = { rows.createCell(3),rows.createCell(4)};
cell[0].setCellValue(“大大大”);给0行的3列赋值
cell[1].setCellValue(“小小”);//给0行的4列赋值
cell[0].setCellStyle(cellStyle);//引用样式 注意这些样式值对单个框生效
cell[1].setCellStyle(cellStyle);//引用样式 注意这些样式值对单个框生效
//这个是整列都引用样式 发现有的样式会不生效
hsheet.setDefaultColumnStyle(1, cellStyle);//参数1 为列 参数2为样式 整列可以引用改样式
如果你想跨行或者跨列来合并 那么继续引用上面的样式则部分不生效
比如说边框 所以要想给合并之后的增加边框则使用以下方法:
CellRangeAddress cra =new CellRangeAddress(1, 2, 2, 2);// 开始行,结束行,开始列,结束列。
hsheet.addMergedRegion(cra);//执行合并
setRegionBorder(1, cra, hsheet);//这个是抽离出来的方法 可以共用
具体方法如下:
/**
public static void setRegionBorder(int border, CellRangeAddress region, Sheet sheet){
RegionUtil.setBorderBottom(border,region, sheet); //第一个参数为数字 我填的1具体干嘛用的我也不是很清楚
RegionUtil.setBorderLeft(border,region, sheet); //第二个参数为上边new 的 需要合并的地址
RegionUtil.setBorderRight(border,region, sheet); //第三个参数为 sheet页
RegionUtil.setBorderTop(border,region, sheet);
}
*/
这样合并的单元格才会有边框,
还有我写的东西赋值有可能跟百度搜出来的不一致,我觉得是跟版本有关系;