在我们使用poi进行Excel绘制各种样式的时候难免会出现一些问题,接下来就会把常用的一些问题进行汇总,并给出解决方法,如:合并单元格,合并单元格边框线,字体各种样式等。。。。
::."xls"
//XSSF:".xlsx"
XSSFWorkbook workbook = new XSSFWorkbook();
// 创建一个工作表sheet
XSSFSheet sheet = workbook.createSheet();
XSSFRow row = sheet.createRow(0); //获取本sheet第一行
row.setHeightInPoints(30); //设置行高(像素)
XSSFCell cell = row.createCell(0); //获取行里面的第一个单元格
sheet.setColumnWidth(4, 50*256)// 设置第5列的列宽(50设置的话,实际列宽为49.29,如需要设置百分之百的列快,sheet.SetColumnWidth(4, (int)((50 + 0.72) * 256)); 这样就会是50了)
XSSFFont font = workbook.createFont(); //创建字体
font.setFontName("微软雅黑"); //字体
font.setFontHeightInPoints((short) 13); //字体大小
font.setBold(true); //是否加粗
XSSFCellStyle cellStyle = workbook.createCellStyle(); //创建单元格风格
cellStyle.setAlignment(HorizontalAlignment.CENTER); // 设置字体水平居中
cellStyle.setVerticalAlignment(cellStyle.getVerticalAlignmentEnum().CENTER); //设置字体垂直居中
cellStyle.setFont(font); //字体样式存储在整个单元格样式里面
cell.setCellStyle(cellStyle); //设置单元格样式
cell.setCellValue("测试内容"); //设置单元格内容
CellRangeAddress cra = new CellRangeAddress(0,0,0,2); //设置合并单元格(起始行号,终止行号,起始列号,终止列号)
sheet.addMergedRegion(cra); //设置合并内容
//合并单元格内容后,如果需要添加合并过后单元格没有出现边框线,需要补充单元格线,
//设置合并单元格边框
public void setRegionBorder (CellRangeAddress cra,XSSFSheet sheet){
RegionUtil.setBorderBottom(BorderStyle.THIN, cra, sheet);
RegionUtil.setBorderLeft(BorderStyle.THIN, cra, sheet);
RegionUtil.setBorderRight(BorderStyle.THIN, cra, sheet);
RegionUtil.setBorderTop(BorderStyle.THIN, cra, sheet);
}
//设置单元格边框
public void setBorder ( XSSFCellStyle cellStyle){
cellStyle.setBorderBottom(BorderStyle.THIN); //下边框
cellStyle.setBorderLeft(BorderStyle.THIN);//左边框
cellStyle.setBorderTop(BorderStyle.THIN);//上边框
cellStyle.setBorderRight(BorderStyle.THIN);//右边框
}
/**
* 补充单元格样式
* @param workbook
* @param row 某行
* @param cellValue 某个 如"1,2,3"
*/
public void supplementaryCellStyles(XSSFWorkbook workbook,XSSFRow row,String cellValue){
for (int i = 0 ;i<cellValue.split(",").length;i++){
XSSFCell cell= row.createCell(Integer.valueOf(cellValue.split(",")[i]));
XSSFCellStyle cellStyle = workbook.createCellStyle();
setBorder(cellStyle);
cell.setCellStyle(cellStyle);
}
}