poi读取Excel中的图片位置

下载最新的poi包poi-bin-3.12-20150511.zip,里面有读取xlsx图片的新方法!

上个星期开始鼓捣导入Excel,下载了最新的poi包,结果Excel文件里有图片。处理图片还真是个难事,网上搜索一开始发现了HSSFSheet类处理图片的例子,但不是xlsx文件能用的,其中对一个方法HSSFSheet.getDrawingEscherAggregate()有印象。

转帖处:贴子1:http://www.cnblogs.com/shwen99/archive/2010/09/13/1824896.html

后来又找到了兼容xls和xlsx读图片位置的贴子,这个贴子就可以解决问题了

转帖处:贴子2:http://blog.csdn.net/delongcpp/article/details/8833995

但是其中用到一个方法XSSFSheet.getRelations(),得到一个集合遍历查找,比较好奇这个集合是什么。在我的项目中试了一下发现只有一个元素,有个疑问是不是取出工作表的图片只要拿到这个集合的第一个元素就行呢(就不用写for循环遍历的代码,懒~)?上网找了官方api文档,找着找着,看到官方文档中写着XSSFSheet里有一个方法getDrawingPatriarch(),有点像贴子1那个方法,返回的结果是贴子2需要的对象。之前也所有方法都试过,印象中没有这个方法,在项目里头试了一下果然没有。于是猜是不是有新版本了,有点怀疑因为我上周才下载了最新版3.11,但还是怀着期待惊喜的心情上官网查。果然,最新版是3.12,5月11号更新!也就是昨天(这个贴子是12号写的没发表出去)!哈哈,真是刚想瞌睡的时候有人来送枕头。现在可以更方便的处理xlsx图片了!

下面是我写的一个方法:

     /**
	 * 获取单元格中的图片文件名,如果单元格内容不是图片返回null。
	 * 
	 * @param sheet
	 *            工作表
	 * @param cell
	 *            单元格
	 * @return 图片文件名
	 */
	public static String getPictureNameOfCell(Sheet sheet, Cell cell) {
		int cellRowIndex = cell.getRowIndex();
		int cellColIndex = cell.getColumnIndex();
		if (sheet instanceof XSSFSheet) {
			XSSFSheet xSheet = (XSSFSheet) sheet;
			XSSFDrawing drawing = xSheet.getDrawingPatriarch();
			List<XSSFShape> xShapeList = drawing.getShapes();
			for (int i = 0; i < xShapeList.size(); i++) {
				XSSFPicture xPicture = (XSSFPicture) xShapeList.get(i);
				XSSFClientAnchor xAnchor = xPicture.getPreferredSize();
				if (xAnchor.getRow1() == cellRowIndex && xAnchor.getCol1() == cellColIndex) {
					return xPicture.getPictureData().getPackagePart().getPartName().getName();
				}
			}
		}
		return null;
	}



转载于:https://my.oschina.net/js99st/blog/417858

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值