使用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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用Apache POI的XSSFDrawing类来向Excel插入图片。下面是一个简单的示例代码: ``` import java.io.*; import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.*; import org.apache.poi.util.IOUtils; public class InsertImageToExcel { public static void main(String[] args) throws Exception { // 创建Excel文档对象 XSSFWorkbook workbook = new XSSFWorkbook(); // 创建工作表对象 XSSFSheet sheet = workbook.createSheet("Sheet1"); // 读取图片文件 InputStream imageStream = new FileInputStream("image.jpg"); byte[] bytes = IOUtils.toByteArray(imageStream); // 向Excel插入图片 int pictureIdx = workbook.addPicture(bytes, Workbook.PICTURE_TYPE_JPEG); Drawing drawing = sheet.createDrawingPatriarch(); ClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, 0, 0, 5, 5); Picture picture = drawing.createPicture(anchor, pictureIdx); picture.resize(); // 保存Excel文件 FileOutputStream fileOut = new FileOutputStream("workbook.xlsx"); workbook.write(fileOut); fileOut.close(); System.out.println("图片已成功插入Excel文件!"); } } ``` 在上面的代码,我们首先读取图片文件并将其转换为字节数组,然后使用`Workbook.addPicture()`方法将图片添加到Excel工作簿。接下来,我们创建一个绘图对象,并使用`Drawing.createAnchor()`创建一个插图锚点,然后使用`Drawing.createPicture()`将图片插入到锚点位置。最后,我们调用`Picture.resize()`方法来调整图片大小以适应单元格。 请注意,上面的示例代码只适用于XLSX格式的Excel文件。如果要处理XLS格式的文件,需要使用HSSFWorkbook和HSSFPicture类。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值