POI的操作Excel时,不可避免有操作图片的处理。怎么插入图片呢?网上也有不少介绍。
下面的代码是向Excel中插入多张图片的例子:
public static void main(String[] args) {
FileOutputStream fileOut = null;
BufferedImage bufferImg = null;
BufferedImage bufferImg1 = null;
try {
// 先把读进来的图片放到一个ByteArrayOutputStream中,以便产生ByteArray
// 读入图片1
ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
bufferImg = ImageIO.read(new File("**.jpg"));
ImageIO.write(bufferImg, "jpg", byteArrayOut);
// 读入图片2
ByteArrayOutputStream byteArrayOut1 = new ByteArrayOutputStream();
bufferImg1 = ImageIO.read(new File("**"));
ImageIO.write(bufferImg1, "png", byteArrayOut1);
// 创建一个工作薄
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet1 = wb.createSheet("test picture");
HSSFPatriarch patriarch = sheet1.createDrawingPatriarch();
HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 255, 255,
(short) 1, 1, (short) 5, 5);
anchor.setAnchorType(3);
HSSFClientAnchor anchor1 = new HSSFClientAnchor(0, 0, 255, 255,
(short) 6, 6, (short) 10, 10);
anchor1.setAnchorType(3);
// 插入图片1
patriarch.createPicture(anchor, wb.addPicture(byteArrayOut
.toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG));
// 插入图片2
patriarch.createPicture(anchor1, wb.addPicture(byteArrayOut1
.toByteArray(), HSSFWorkbook.PICTURE_TYPE_PNG));
fileOut = new FileOutputStream("d:/workbook.xls");
// 写入excel文件
wb.write(fileOut);
fileOut.close();
} catch (IOException io) {
io.printStackTrace();
System.out.println("erorr : " + io.getMessage());
} finally {
if (fileOut != null) {
try {
fileOut.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
这边的效果没有保持原来的倍率,有点失真了,是因为HSSFClientAnchor(0, 0, 255, 255, (short) 1, 1, (short) 5, 5); 这个构造函数的原因。
HSSFClientAnchor构造函数参数的意义如下:
* @param dx1 the x coordinate within the first cell.
* @param dy1 the y coordinate within the first cell.
* @param dx2 the x coordinate within the second cell.
* @param dy2 the y coordinate within the second cell.
* @param col1 the column (0 based) of the first cell.
* @param row1 the row (0 based) of the first cell.
* @param col2 the column (0 based) of the second cell.
* @param row2 the row (0 based) of the second cell.
其中dx1,dy1这个点是定义图片在开始cell中的起始位置。这个点是开始cell的左上为原点,相对比率来确定的。不是绝对坐标。
dx2,dy2这个点是定义图片在终了cell的终了位置。这个点是终了cell的左上为原点,相对比率来确定的。不是绝对坐标。
col1,row1是定义开始cell。
col2,row2是定义终了cell。
如果我们想要保持原始的图片大小,改一下上面代码中的下面部分就可以了。
修改前:patriarch.createPicture(anchor, wb.addPicture(byteArrayOut.toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG));
修改后:patriarch.createPicture(anchor, wb.addPicture(byteArrayOut
.toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG)).resize(1);
其中resize是放大或缩小的函数。用了这个函数后,HSSFClientAnchor构造函数中的图片显示的终了cell位置就不起作用了。
以上方法虽然实现了向excel中插入图片,但是下载下来的excel文件在打开时总是报“文件错误,数据可能丢失”这种错误,求解?
分享到:
相关推荐
POI向excel中插入图片
POI导出Excel工具类,自动设置标题 列名 文件名,可插入图片,合并单元格
java实现在Excel中插入图片有时碰到下载excel中加入图片或已经制作好的图章。
利用POI技术将图片插入到excel中,希望对大家有用,直接运行ExportExcel类,即可看到效果!!!
利用java往excel中插入图片 POI利用java往excel中插入图片POI形式
使用poi在excel中生成各种常见的图像,比如饼状图(普通饼状图、三D图,环状体、折线图、柱状图、等~~)
使用apache-poi向EXCEL固定位置插入图片,xlsx版本,xls版本可自行修改读取excel的对象。由于前半段是多excel和图片资源做分类读取,就只放核心代码。
解决POI3.10在添加图片的时候自身有一个BUG。纠结了很久都没解决,今天终于弄好了,文件包中附带了修改好的jar包bsj-poi-ooxml-3.10-FINAL-20140208.jar。主要问题是出在:org.apache.poi.xwpf.usermodel.XWPFRun....
poi操作Excel的各种解释 对Excel导出和导入,对Excel的合并列,插入图片等
一般在导出Excel中,在创建工作表sheet后,初始化的sheet中row都是一行一行的...方案:使用POI在Excel中插入多张图片,由于平台中只保存图片的url地址,所以首先需要获取图片数据,然后转换为二进制,最后将图片插入。
支持对excel的两中格式操作,封装了往单元格插入数据(支持书写单元格引用或者单元格坐标)、设置和获取sheet及workbook、往excel特定位置插入图片、获取excel中所有的图片、复制sheet、移除sheet、复制sheet中的...
java写入excel图片操作 包含需要的类库和相应的代码
15、插入图片 16、调整工作表位置 17、设置打印区域 18、标注脚注 19、在工作单中清空行数据,调整行位置 20、选中指定的工作表 21、工作表的放大缩小 22、头注和脚注 23、自定义颜色 24、填充和颜色设置...
导入excel文件,结合具体的Struts框架,有一定的局限性
主要介绍了Windows中使用Java生成Excel文件并插入图片的方法,其中向Excel中插入图片文中通过使用Apache POI来实现,需要的朋友可以参考下
使用`Freemarker`导出Excel后,在整合`poi`插入图片到Excel,从而实现`Freemarker`导出带有图片的Excel工具。
easyexcel Base on Poi 1、自定义模板可以继承Template类,参考DefaultTemplate。 2、目前只提供了一个默认的模板类。...5、目前暂时不支持打印样式,图片插入,超链接等。 工程中自带了example,简单实用
$ sBitmap:图片的完整路径或预设的质感用来填充对象的背景 $ bTextureTile:如果真集图片或预设的质地由$ sBitmap瓷砖定义 其他事项 ============= *变量的命名现在坚持更加AutoIt的UDF标准 ------------------...
文档处理模块:该模块可以打开、编辑、保存各种类型的文档,例如Word、Excel、PPT等,同时还可以设置文档样式、插入图片、表格等。 表格编辑模块:该模块可以创建、编辑各种类型的表格,例如Excel表格、Access...
21.2 应用POI组件操作Excel 807 第22章 报表与打印 829 22.1 Web打印 830 22.2 利用Word打印报表 833 22.3 利用Excel打印报表 838 22.4 应用WebBrowser+CSS套打邮寄 22.5 打印库存报表 844 22.6 高级报表 850 第6篇 ...