java--poi读取excel图片和内容(支持03,07版本)
我做的是导入学生信息包括每个学生对应的证件照图片,所以此处不仅需要获取excel中的图片,还需要获取图片的位置信息,比如--哪行哪列的图片对应的是哪个学生,具体代码如下:
public static void getDataFromExcel(String filePath) throws IOException{//String filePath = "E:\\123.xlsx";//判断是否为excel类型文件if(!filePath.endsWith(".xls")&&!filePath.endsWith(".xlsx")){System.out.println("文件不是excel类型");}FileInputStream fis =null;Workbook wookbook = null;Sheet sheet =null;try{//获取一个绝对地址的流fis = new FileInputStream(filePath);}catch(Exception e){e.printStackTrace();}try {//2003版本的excel,用.xls结尾wookbook = new HSSFWorkbook(fis);//得到工作簿} catch (Exception ex) {//ex.printStackTrace();try{//2007版本的excel,用.xlsx结尾fis = new FileInputStream(filePath);wookbook = new XSSFWorkbook(fis);//得到工作簿} catch (IOException e){// TODO Auto-generated catch blocke.printStackTrace();}}Map<String, PictureData> maplist=null;sheet = wookbook.getSheetAt(0); // 判断用07还是03的方法获取图片 if (filePath.endsWith(".xls")) { maplist = getPictures1((HSSFSheet) sheet); } else if(filePath.endsWith(".xlsx")){ maplist = getPictures2((XSSFSheet) sheet); } try {printImg(maplist);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} //得到一个工作表//获得表头Row rowHead = sheet.getRow(0);//判断表头是否正确System.out.println(rowHead.getPhysicalNumberOfCells());if(rowHead.getPhysicalNumberOfCells() != 5){System.out.println("表头的数量不对!");}//获得数据的总行数int totalRowNum = sheet.getLastRowNum();//要获得属性int studentid=0;String studentname="";String grade="";String classes="";String pic="";//获得所有数据for(int i = 1 ; i <= totalRowNum ; i++){//获得第i行对象Row row = sheet.getRow(i);//获得获得第i行第0列的 String类型对象Cell cell = row.getCell((short)0);studentid = (int) cell.getNumericCellValue();//获得一个数字类型的数据//studentname = (int) cell.getNumericCellValue();cell = row.getCell((short)1);studentname =cell.getStringCellValue().toString();cell = row.getCell((short)2);grade =cell.getStringCellValue().toString();cell = row.getCell((short)3);classes =cell.getStringCellValue().toString();cell = row.getCell((short)3);classes =cell.getStringCellValue().toString();System.out.println("学号:"+studentid+",姓名:"+studentname+",年级:"+grade+",班级:"+classes+",证件照:"+pic);}for (Entry<String, PictureData> entry : maplist.entrySet()) { System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue()); } }/*** 获取图片和位置 (xls)* @param sheet* @return* @throws IOException*/public static Map<String, PictureData> getPictures1 (HSSFSheet sheet) throws IOException {Map<String, PictureData> map = new HashMap<String, PictureData>();List<HSSFShape> list = sheet.getDrawingPatriarch().getChildren();for (HSSFShape shape : list) {if (shape instanceof HSSFPicture) {HSSFPicture picture = (HSSFPicture) shape;HSSFClientAnchor cAnchor = (HSSFClientAnchor) picture.getAnchor();PictureData pdata = picture.getPictureData();String key = cAnchor.getRow1() + "-" + cAnchor.getCol1(); // 行号-列号map.put(key, pdata);}}return map;}/*** 获取图片和位置 (xlsx)* @param sheet* @return* @throws IOException*/public static Map<String, PictureData> getPictures2 (XSSFSheet sheet) throws IOException {Map<String, PictureData> map = new HashMap<String, PictureData>();List<POIXMLDocumentPart> list = sheet.getRelations();for (POIXMLDocumentPart part : list) {if (part instanceof XSSFDrawing) {XSSFDrawing drawing = (XSSFDrawing) part;List<XSSFShape> shapes = drawing.getShapes();for (XSSFShape shape : shapes) {XSSFPicture picture = (XSSFPicture) shape;XSSFClientAnchor anchor = picture.getPreferredSize();CTMarker marker = anchor.getFrom();String key = marker.getRow() + "-" + marker.getCol();map.put(key, picture.getPictureData());}}}return map;}//图片写出public static void printImg(Map<String, PictureData> sheetList) throws IOException { //for (Map<String, PictureData> map : sheetList) { Object key[] = sheetList.keySet().toArray(); for (int i = 0; i < sheetList.size(); i++) { // 获取图片流 PictureData pic = sheetList.get(key[i]); // 获取图片索引 String picName = key[i].toString(); // 获取图片格式 String ext = pic.suggestFileExtension(); byte[] data = pic.getData(); //图片保存路径 FileOutputStream out = new FileOutputStream("D:\\img\\pic" + picName + "." + ext); out.write(data); out.close(); } // } } public static void main(String[] args) throws Exception {getDataFromExcel("E:"+ File.separator +"学生信息表.xlsx");}
效果如下:
java--poi读取excel图片和内容(支持03,07版本)相关推荐
- java poi 读取excel 图片_Poi读取excel插图的方法和操作步骤
我们在使用Excel制作表格的时候,有时会使用"Poi读取excel插图",但是很多初学者都不懂也不会制作.下面,我就给大家讲一下"Poi读取excel插图"的 ...
- java 从excel中读取数据_在Java中读取Excel文件的内容和导出数据到Excel文件中
转自www.chianjavaworld.net 原作者:SonyMusic 读:rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr 在Java ...
- java poi读取excel报错Your InputStream was neither an OLE2 stream, nor an OOXML stream
错误描述 java poi读取excel报错Your InputStream was neither an OLE2 stream, nor an OOXML stream 楼主是读取的另存为的exc ...
- 使用Java POI读取excel文档
Java使用POI读取excel文档教程 一:Poi的介绍 1.简介 1.由apache公司提供 2.Java编写的免费开源的跨平台的Java API 3.提供API给Java程序对Microsoft ...
- java poi读取excel文件(xlsx)
读取excel文件的方法有许多种,这篇文章主要描述通过poi读取excel文件. 先maven导入jar包 <dependency><groupId>org.apache.po ...
- java POI 读取Excel文件 将图片、表格生成到PPT
临时有个需求,要求通过读取EXCEL文件,然后通过文件名称去给定的文件夹内查找图片,并将图片写入PPT中,详情以表格的形式写到图片右侧,每张图片一页PPT.效果如图所示: 用到的jar包如下(mave ...
- poi读取excel中的内容(带图片)
项目中有一需求:需要读取excel中的信息,带图片,需要将每一行的图片,做对应,整理方法如下: 主要逻辑: 1,获取excel对象, 2,读取excel中所有的图片流,将图片所处的位置和图片流存在ma ...
- POI 读取excel图片并定位图片需要提前注意的事项
场景介绍 因为一直在使用阿里的EasyExcel也挺方便的,而且性能也是非常不错,但是有些场景还是不支持,比如说读取excel中的指定行指定列的图片信息. 毕竟Apache的POI还是比较强大,对于一 ...
- java poi 读取excel 编码_Java使用POI 读取和写入Excel指南
做项目时经常有通过程序读取Excel数据,或是创建新的Excel并写入数据的需求:网上很多经验教程里使用的POI版本都比较老了,一些API在新版里已经废弃,这里基于最新的Apache POI 4.0. ...
- Apach POI 读取Excel图片
备注:Excel插入图片不被压缩:文件 - 选项 - 高级 - 图像大小和质量 - [勾选]不压缩文件中的图像 Excel文件: 依赖 <dependency><groupId> ...
最新文章
- 苹果裁员逾200人,拿无人驾驶“开刀”
- 关于UNION联合体结构的运用
- docker 镜像修改的配置文件自动还原_原创 | 全网最实在的docker入门教程四
- IOS 消息机制(NSNotificationCenter)
- 2020云栖大会,宜搭发布专业开发者能力,助力政企数字化转型——阿里云开发者社区
- html标题怎么分开,html – 如何使用angularjs将标签标题与其主体分开?
- BundlePhobia
- Wireshark之捕获过滤器
- livedata mvvm_Android MVVM LiveData数据绑定
- Hive之行转列/列转行
- Photoshop/PS中如何写维吾尔语等语言 乱码
- 产品补丁包测试的基本流程
- 华为服务器磁盘IO性能查看,磁盘io性能
- jenkins 触发 Rancher实现自动部署 流水线一键操作
- linux系统下解压缩
- 计算广告(一):在线广告概述
- python爬虫爬拼多多销量_Python爬取各大汽车销量信息
- Linux内核设计与实现 第18章 调试
- phpinfo()函数 写法
- Python DistributedDataParallel(DDP)训练模型
热门文章
- 中文女和程序员的爱情奇遇(转自博客园)
- MySQL--基础--dql--语法与函数
- 2017CME中国机床展会刊(参展商名录)
- 机器人技术(RoboCup 2D)如何进行一场球赛
- 快递大决战时刻:菜鸟顺丰互怼背后,数据所有权到底归谁?看最全评论
- PL/SQL initialization error could not initialize
- Android 项目借用华为、小米、VIVO、OPPO等远程真机调试
- 深度技术XP完美精简版V5.9双重版
- 飞行堡垒9玩游戏掉帧严重,亲测有效。
- 技术人如何打造出日赚1000+美元的赚钱利器(转https://gitbook.cn/gitchat/activity/58f8d110b75ae65904c10628?utm_source=csd)