excel poi 加背景图_java 在Excel中插入图片 POI实现

一、POI简介

Jakarta POI 是apache的子项目,目标是处理ole2对象。它提供了一组操纵Windows文档的Java API

目前比较成熟的是HSSF接口,处理MS Excel(97-2002)对象。它不象我们仅仅是用csv生成的没有格式的可以由Excel转换的东西,而是真正的Excel对象,你可以控制一些属性如sheet,cell等等。

二、HSSF概况

HSSF 是Horrible SpreadSheet Format的缩写,也即“讨厌的电子表格格式”。 也许HSSF的名字有点滑稽,就本质而言它是一个非常严肃、正规的API。通过HSSF,你可以用纯Java代码来读取、写入、修改Excel文件。

HSSF 为读取操作提供了两类API:usermodel和eventusermodel,即“用户模型”和“事件-用户模型”。前者很好理解,后者比较抽象,但操作效率要高得多。

三、实现

1. 在sheet中特定位置插入图片

Excel插入图片步骤 :

画图的顶级管理器对象HSSFPatriarch, 一个sheet只能获取一个

创建一个新的客户端锚点HSSFClientAnchor

图片转换为字节流byte[]

向Excel中添加一张图片,返回图片在excel中的索引,base 1

创建图片

2.示例:

// patriarch负责在sheet中创建图片

HSSFPatriarch patriarch = sheet.createDrawingPatriarch();

/**

* 创建一个新的客户端锚点,附加到excel工作表,并设置左上角和右下角

*

* @param realX1  图片的左上角在开始单元格(col1,row1)中的横坐标

* @param realY1  图片的左上角在开始单元格(col1,row1)中的纵坐标

* @param realX2  图片的右下角在结束单元格(col2,row2)中的横坐标

* @param realY2  图片的右下角在结束单元格(col2,row2)中的纵坐标

* @param col1  开始单元格所处的列号, base 0, 图片左上角在开始单元格内

* @param row1  开始单元格所处的行号, base 0, 图片左上角在开始单元格内

* @param col2  结束单元格所处的列号, base 0, 图片右下角在结束单元格内

* @param row2  结束单元格所处的行号, base 0, 图片右下角在结束单元格内

* */

HSSFClientAnchor anchor = new HSSFClientAnchor(realX1, realY1, realX2, realY2, col1, row1, col2, row2);

// 图片字节流

ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();

BufferedImage bufferImg = ImageIO.read(new File("ok.jpg"));

ImageIO.write(bufferImg, "jpg", byteArrayOut);

byte[] imgtypes = byteArrayOut.toByteArray();

/*

* 在工作簿中添加一张图片,返回图片的索引,base 1

* @param pictureType 图片类型 PICTURE_TYPE_JPEG|PICTURE_TYPE_PNG

**/

int puctureIndex = workbook.addPicture(imgtypes, pictureType);

// 创建图片

patriarch.createPicture(anchor, puctureIndex);

这篇文章主要介绍了Windows中使用Java生成Excel文件并插入图片的方法,其中向Excel中插入图片文中通过使用Apache POI来实现,需要的朋友可以参考下

生成简单的Exc

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用POI插入图片Excel可以通过以下步骤实现: 1. 创建一个Workbook对象,可以是XSSFWorkbook或HSSFWorkbook。 2. 创建一个Sheet对象,可以通过Workbook的createSheet方法来创建。 3. 创建一个Drawing对象,可以通过Sheet的createDrawingPatriarch方法来创建。 4. 创建一个ClientAnchor对象,用于设置图片的位置和大小。 5. 载图片,可以使用ImageIO读取图片文件,也可以通过InputStream读取图片。 6. 创建一个Picture对象,可以通过Drawing的createPicture方法来创建,传入ClientAnchor和图片的byte数组或InputStream。 7. 调用Workbook的write方法将数据写入到文件。 以下是一个示例代码: ```java // 创建Workbook对象 Workbook workbook = new XSSFWorkbook(); // 创建Sheet对象 Sheet sheet = workbook.createSheet("Sheet1"); // 创建Drawing对象 Drawing<?> drawing = sheet.createDrawingPatriarch(); // 创建ClientAnchor对象 ClientAnchor anchor = new XSSFClientAnchor(0, 0, 0, 0, 0, 0, 10, 10); // 载图片 File imageFile = new File("image.jpg"); byte[] imageData = Files.readAllBytes(imageFile.toPath()); // 创建Picture对象 int pictureIndex = workbook.addPicture(imageData, Workbook.PICTURE_TYPE_JPEG); Picture picture = drawing.createPicture(anchor, pictureIndex); // 调整图片大小 picture.resize(); // 写入数据到文件 FileOutputStream outputStream = new FileOutputStream("output.xlsx"); workbook.write(outputStream); outputStream.close(); ``` 注意,上述代码使用的是XSSFClientAnchor和XSSFWorkbook,如果是使用HSSFWorkbook,则需要使用HSSFClientAnchor和HSSFWorkbook。另外,如果需要设置图片的旋转角度、透明度等属性,可以通过Picture对象的setRotation、setAlpha等方法来设置
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值