最近做了一个导出excel的功能,在网上一顿找,终于完成了,写个文章做个总结,希望有人能用上。
示例:
InputStream inputStream = this.getClass().getResourceAsStream("/template/excel/invoice.xlsx"); Workbook workbook = WorkbookFactory.create(inputStream); Sheet sheet = workbook.getSheetAt(0); Cell cell = sheet.getRow(1).getCell(2); cell.setCellValue(1);单元格x、y下标都是从0开始的
示例:
CellStyle cellStyle = workbook.createCellStyle(); //合并单元格,四个参数分别是起始行,终止行,起始列,终止列 //也就是把第二行的第二个和第三个单元格合并 CellRangeAddress region = new CellRangeAddress(1, 1, 1, 2); sheet.addMergedRegion(region); //设置行高 sheet.getRow(1).setHeightInPoints(51.75f); //设置单元格边框 cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN); cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN); cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN); cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); //字体水平居中和垂直居中 cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); //自动换行 cellStyle.setWrapText(true); cell.setCellStyle(cellStyle);在合并单元格和设置边框时遇到了点问题 1、合并单元格后设置字体居中需要把excel模板里的合并单元格格式去掉,要不有冲突,字体无法居中 2、在合并单元格上设置边框只能设置起始单元格,我的做法是比如1.2单元格合并了,在设置边框时先将1单元格值赋进去,再将2单元格赋值"",感觉这样做很傻,网上应该有更好的办法,但是我没有去尝试,如果有需要可以自己去查。
示例:
ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream(); BufferedImage bufferImg = ImageIO.read(new File("C:\\Users\\jianl\\Desktop\\test.png"); ImageIO.write(bufferImg, "png", byteArrayOut); Drawing patriarch = sheet.createDrawingPatriarch(); ClientAnchor anchor = new XSSFClientAnchor(10000, 20000, -360000, 0,(short)0 , 0, (short) 3, 1); // 插入图片 patriarch.createPicture(anchor, workbook.addPicture(byteArrayOut.toByteArray(), XSSFWorkbook.PICTURE_TYPE_JPEG));这块主要要注意的就是XSSFClientAnchor里面的8个参数 前四个是偏移量,就是相对于你图片要放的位置的偏移,1.3是左右偏移,2.4是上下偏移 后四个是要放的位置,5.7是图片宽的位置,数值就是单元格位置,6.8是图片长,也是所在单元格位置
我导出excel就用到了这些,希望能对你有帮助