我做的是导入学生信息包括每个学生对应的证件照图片,所以此处不仅需要获取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版本)相关推荐

  1. java poi 读取excel 图片_Poi读取excel插图的方法和操作步骤

    我们在使用Excel制作表格的时候,有时会使用"Poi读取excel插图",但是很多初学者都不懂也不会制作.下面,我就给大家讲一下"Poi读取excel插图"的 ...

  2. java 从excel中读取数据_在Java中读取Excel文件的内容和导出数据到Excel文件中

    转自www.chianjavaworld.net 原作者:SonyMusic 读:rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr 在Java ...

  3. 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 ...

  4. 使用Java POI读取excel文档

    Java使用POI读取excel文档教程 一:Poi的介绍 1.简介 1.由apache公司提供 2.Java编写的免费开源的跨平台的Java API 3.提供API给Java程序对Microsoft ...

  5. java poi读取excel文件(xlsx)

    读取excel文件的方法有许多种,这篇文章主要描述通过poi读取excel文件. 先maven导入jar包 <dependency><groupId>org.apache.po ...

  6. java POI 读取Excel文件 将图片、表格生成到PPT

    临时有个需求,要求通过读取EXCEL文件,然后通过文件名称去给定的文件夹内查找图片,并将图片写入PPT中,详情以表格的形式写到图片右侧,每张图片一页PPT.效果如图所示: 用到的jar包如下(mave ...

  7. poi读取excel中的内容(带图片)

    项目中有一需求:需要读取excel中的信息,带图片,需要将每一行的图片,做对应,整理方法如下: 主要逻辑: 1,获取excel对象, 2,读取excel中所有的图片流,将图片所处的位置和图片流存在ma ...

  8. POI 读取excel图片并定位图片需要提前注意的事项

    场景介绍 因为一直在使用阿里的EasyExcel也挺方便的,而且性能也是非常不错,但是有些场景还是不支持,比如说读取excel中的指定行指定列的图片信息. 毕竟Apache的POI还是比较强大,对于一 ...

  9. java poi 读取excel 编码_Java使用POI 读取和写入Excel指南

    做项目时经常有通过程序读取Excel数据,或是创建新的Excel并写入数据的需求:网上很多经验教程里使用的POI版本都比较老了,一些API在新版里已经废弃,这里基于最新的Apache POI 4.0. ...

  10. Apach POI 读取Excel图片

    备注:Excel插入图片不被压缩:文件 - 选项 - 高级 - 图像大小和质量 - [勾选]不压缩文件中的图像 Excel文件: 依赖 <dependency><groupId> ...

最新文章

  1. 苹果裁员逾200人,拿无人驾驶“开刀”
  2. 关于UNION联合体结构的运用
  3. docker 镜像修改的配置文件自动还原_原创 | 全网最实在的docker入门教程四
  4. IOS 消息机制(NSNotificationCenter)
  5. 2020云栖大会,宜搭发布专业开发者能力,助力政企数字化转型——阿里云开发者社区
  6. html标题怎么分开,html – 如何使用angularjs将标签标题与其主体分开?
  7. BundlePhobia
  8. Wireshark之捕获过滤器
  9. livedata mvvm_Android MVVM LiveData数据绑定
  10. Hive之行转列/列转行
  11. Photoshop/PS中如何写维吾尔语等语言 乱码
  12. 产品补丁包测试的基本流程
  13. 华为服务器磁盘IO性能查看,磁盘io性能
  14. jenkins 触发 Rancher实现自动部署 流水线一键操作
  15. linux系统下解压缩
  16. 计算广告(一):在线广告概述
  17. python爬虫爬拼多多销量_Python爬取各大汽车销量信息
  18. Linux内核设计与实现 第18章 调试
  19. phpinfo()函数 写法
  20. Python DistributedDataParallel(DDP)训练模型

热门文章

  1. 中文女和程序员的爱情奇遇(转自博客园)
  2. MySQL--基础--dql--语法与函数
  3. 2017CME中国机床展会刊(参展商名录)
  4. 机器人技术(RoboCup 2D)如何进行一场球赛
  5. 快递大决战时刻:菜鸟顺丰互怼背后,数据所有权到底归谁?看最全评论
  6. PL/SQL initialization error could not initialize
  7. Android 项目借用华为、小米、VIVO、OPPO等远程真机调试
  8. 深度技术XP完美精简版V5.9双重版
  9. 飞行堡垒9玩游戏掉帧严重,亲测有效。
  10. 技术人如何打造出日赚1000+美元的赚钱利器(转https://gitbook.cn/gitchat/activity/58f8d110b75ae65904c10628?utm_source=csd)