POI工具操作excel(三)写图片到excel中

       之前的文章介绍了POI的基本操作,包括创建excel,写入数据并且设置格式。不过这还不够,我们有时候的需求是把图片导出到excel中,那么这一篇就简单讲解下怎么把图片保存到excel当中。

1、插入图片到excel中

package com.zdw.poi;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.util.IOUtils;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFClientAnchor;

import java.io.FileInputStream;
import java.io.FileOutputStream;

/**
 * 测试创建Workbook的excel,把图片导出到excel中
 */
public class TestCellStyle {
    public static void main(String[] args) throws Exception {
        //创建工作簿,excel2007版本的,如果是excel2003的话。创建的对象是:HSSFWorkbook
        Workbook workbook = new SXSSFWorkbook();
        //创建sheet
        Sheet sheet = workbook.createSheet("picture sheet");

        //创建文件输入流
        FileInputStream inputStream = new FileInputStream("D:\\2345Downloads\\datupian.png");
        //利用POI提供的工具类把文件流转化成二进制数据
        byte[] bytes = IOUtils.toByteArray(inputStream);

        //向POI内存中添加一张图片,返回图片在图片集合中的索引
        int pictureIndex = workbook.addPicture(bytes, Workbook.PICTURE_TYPE_PNG);//参数一:图片的二进制数据,参数二:图片类型

        //从Workbook中得到绘制图片的工具类
        CreationHelper helper = workbook.getCreationHelper();
        //创建锚点,设置图片坐标
        ClientAnchor clientAnchor = helper.createClientAnchor();
        clientAnchor.setRow1(2);//设置起始行
        clientAnchor.setCol1(3);//设置起始列

        //从sheet对象中得到一个绘图对象
        Drawing<?> drawingPatriarch = sheet.createDrawingPatriarch();

        //绘制图片,锚点,图片在内存中的位置
        Picture picture = drawingPatriarch.createPicture(clientAnchor, pictureIndex);

        // 使用固定的长宽比例系数
        double a = 10;//表示的是10列
        double b = 15;//表示的是15行
        picture.resize(a,b);//自适应渲染图片

        //创建文件输出流
        FileOutputStream out = new FileOutputStream("D:\\2345Downloads\\picture2.xlsx");
        //调用工作簿的write创建excel
        workbook.write(out);
        out.close();
    }
}

效果:

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值