使用poi向excel中插入内容遇到的问题总结

1、如何插入图片?
在poi中有HSSFPatriarch对象,该对象为画图的顶级管理器,一个sheet只可以创建一个。它的createPicture(anchor,pictureIndex)方法可以在excel中插入一张图片。
具体代码我们可以封装成一个方法:

    public static void setPicture(Workbook wb,HSSFPatriarch patriarch,String path, int iRowStart, int iColStart, int iRowStop, int iColStop){
            File file = new File(path);
            if(file.exists()){
                ByteArrayOutputStream bos = new ByteArrayOutputStream();
                //从文件中读取图片
                BufferedImage bufferImage = ImageIO.read(file);
                //以指定格式写入输出流
                ImageIO.write(bufferImage,"jpg",bos);
                //定义图片在excel中的位置,选取自己合适的位置坐标
                HSSFClientAnchor anchor = new HSSFClientAnchor(20, 1, 1018, 0, (short) (iColStart), iRowStart, (short) (iColStop), iRowStop);
                //加入图片
                patriarch.createPicture(anchor, wb.addPicture(byteArrayOut.toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG));
            }
        }

2、如何画线?
同样的,画线也是由HSSFPatriarch对象创建的,具体封装代码如下

    public static void drawLine(Workbook wb,HSSFPatriarch patriarch,int iRowStart, int iColStart, int iRowStop, int iColStop){
            //线的位置由这个类控制
            HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 350, 0, (short) (iColStart), iRowStart, (short) (iColStop), iRowStop);
            HSSFSimpleShape lineShape = patriarch.createSimpleShape(anchor);
            //画线
            lineShape.setShapeType(HSSFSimpleShape.OBJECT_TYPE_LINE);
        }

3、 如何画矩形?

    HSSFSheet sheet = workbook.createSheet("Test");// 创建工作表(Sheet)
    HSSFPatriarch patriarch=sheet.createDrawingPatriarch();
    HSSFClientAnchor anchor = new HSSFClientAnchor(255,122, 255, 122, (short)1, 0,(short)4, 3);
    HSSFSimpleShape rec = patriarch.createSimpleShape(anchor);
    rec.setShapeType(HSSFSimpleShape.OBJECT_TYPE_RECTANGLE);
    rec.setLineStyle(HSSFShape.LINESTYLE_DASHGEL);//设置边框样式
    rec.setFillColor(255, 0, 0);//设置填充色
    rec.setLineWidth(25400);//设置边框宽度
    rec.setLineStyleColor(0, 0, 255);//设置边框颜色

4、如何设置单元格换行?

    CellStyle cellstyle = wb.createCellStyle();
    cellstyle.setWrapText(true);//true表示自动换行

5、如何进行数据格式化?
数据格式化要借助HSSFDataFormat这个类,当使用Excel内嵌的(或者说预定义)的格式时,直接用HSSFDataFormat.getBuiltinFormat静态方法即可。当使用自己定义的格式时,必须先调用HSSFDataFormat format= HSSFWorkbook.createDataFormat()。

    HSSFSheet sheet = workbook.createSheet("Test");// 创建工作表(Sheet)
    HSSFRow row=sheet.createRow(0);
    //设置日期格式--使用Excel内嵌的格式
    HSSFCell cell=row.createCell(0);
    cell.setCellValue(new Date());
    HSSFCellStyle style=workbook.createCellStyle();
    style.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy h:mm"));
    cell.setCellStyle(style);
    //设置保留2位小数--使用Excel内嵌的格式
    cell=row.createCell(1);
    cell.setCellValue(12.3456789);
    style=workbook.createCellStyle();
    style.setDataFormat(HSSFDataFormat.getBuiltinFormat("0.00"));
    cell.setCellStyle(style);
    //设置货币格式--使用自定义的格式
    cell=row.createCell(2);
    cell.setCellValue(12345.6789);
    style=workbook.createCellStyle();
    style.setDataFormat(workbook.createDataFormat().getFormat("¥#,##0"));
    cell.setCellStyle(style);
    //设置百分比格式--使用自定义的格式
    cell=row.createCell(3);
    cell.setCellValue(0.123456789);
    style=workbook.createCellStyle();
    style.setDataFormat(workbook.createDataFormat().getFormat("0.00%"));
    cell.setCellStyle(style);
    //设置中文大写格式--使用自定义的格式
    cell=row.createCell(4);
    cell.setCellValue(12345);
    style=workbook.createCellStyle();
    style.setDataFormat(workbook.createDataFormat().getFormat("[DbNum2][$-804]0"));
    cell.setCellStyle(style);
    //设置科学计数法格式--使用自定义的格式
    cell=row.createCell(5);
    cell.setCellValue(12345);
    style=workbook.createCellStyle();
    style.setDataFormat(workbook.createDataFormat().getFormat("0.00E+00"));
    cell.setCellStyle(style);

6、如何使用公式?

    cell.setCellType(HSSFCell.CELL_TYPE_FORMULA);
    cell.setCellFormula("sum(A1,C1)");

7、单元格设置边框
注意单元格合并后,设置边框,并不会为其他的(未合并前)单元格设置边框,所以其他边框得自己手动补上

    curStyle.setBorderTop(HSSFCellStyle.BORDER_THIN); // 实线右边框
    curStyle.setBorderRight(HSSFCellStyle.BORDER_THIN); // 实线右边框
    curStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 实线右边框
    curStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN); // 实线右边框

8、设置分页符
sheet.setRowBreak(开始行);
9、另外提供下载excel的方法:

    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    wb.write(bos);
    DownloadUtil.download(bos, response, " XXX.xls");

        //下载函数
    public static void download(ByteArrayOutputStream byteArrayOutputStream, HttpServletResponse response, String returnName) throws IOException{
        response.setContentType("application/octet-stream;charset=utf-8");
        response.setHeader("Content-Disposition",   "attachment;filename=" + URLEncoder.encode(returnName, "UTF-8"));  
        response.setContentLength(byteArrayOutputStream.size());

        ServletOutputStream outputstream = response.getOutputStream();  //取得输出流
        byteArrayOutputStream.writeTo(outputstream);                    //写到输出流
        byteArrayOutputStream.close();                                  //关闭
        outputstream.flush();                                           //刷数据
    }

10、提供网上一个牛人介绍poi博客地址,介绍的很详细:http://www.cnblogs.com/LiZhiW/p/4313789.html?utm_source=tuicool&utm_medium=referral

你可能感兴趣的:(java从入门到精通)