一个表格框可以添加多个图片

Excel表格导入数据的同时导入图片

  @Transactional(rollbackFor = Exception.class)public String selectExcelName(MultipartFile multipartFile, String tableName,String token) {//        String proFile = "D:/ruoyi/uploadPath";//文件存放的路径
//        String filePath = proFile + "/" + "pic/"  ;//图片保存路径SysUser userInfo = tokenStoreService.getUserInfo(token, SysUser.class);//根据tableName获取tableIdString tableId = schemaMenuBaseInfoEntityMapper.selMessageByTableName(tableName);//获取当前的日期Date date = new Date();//设置要获取到什么样的时间SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//获取String类型的时间String createdate = sdf.format(date);//根据tableId去nodiot_schema_table_column_base_info中获取字段名称List<Map<String, Object>> mapList = schemaTableColumnBaseInfoEntityMapper.selectDemoById(tableId);List<Map<String, Object>> list = new ArrayList<>();InputStream inputStream = null; //文件流对象Workbook wb = null;try {inputStream = multipartFile.getInputStream();//创建文件流wb = new HSSFWorkbook(inputStream);//创建工作簿} catch (IOException e) {e.printStackTrace();}Map<Integer, String> map1 = new HashMap<>();//存放第几列和字段的关联关系Sheet sheetAt = wb.getSheetAt(0);Map<String, PictureData> sheetPictrues03Map = ExcelUtils.getSheetPictrues03( (HSSFSheet) sheetAt, (HSSFWorkbook) wb);//  多个图片的时候使用// Map<String, List<PictureData>> sheetPictrues03Map = ExcelUtils.getSheetPictrues03( (HSSFSheet) sheetAt, (HSSFWorkbook) wb);String rowAndCellkey = "";if(null != sheetPictrues03Map  && sheetPictrues03Map.size() > 0){for (Map.Entry<String, PictureData> entry : sheetPictrues03Map.entrySet()) {rowAndCellkey = entry.getKey();}//  多个图片的时候使用/*for (Map.Entry<String, List<PictureData>> entry : sheetPictrues03Map.entrySet()) {rowAndCellkey = entry.getKey();}*/}// 获取图片所存取的列 号String cellString = rowAndCellkey.substring(rowAndCellkey.indexOf("_")+1, rowAndCellkey.length());Map<String, String> pathMap = null;try {//写入图片,并返回图片路径,key:图片坐标,value:图片路径pathMap = printImg(sheetPictrues03Map);} catch (IOException e) {e.printStackTrace();}int firstRowNum = sheetAt.getFirstRowNum();int lastRowNum = sheetAt.getLastRowNum();for (int i = firstRowNum; i <= lastRowNum; i++) { //遍历行Map<String, Object> maps = new HashMap<>();Row row = sheetAt.getRow(i);int firstCellNum = row.getFirstCellNum();int lastCellNum = row.getLastCellNum();for (int i1 = firstCellNum; i1 < lastCellNum; i1++) { //遍历列if (i == 0) { //从第一行开始for (Map<String, Object> map : mapList) {  // 遍历比对,put数据if (row.getCell(i1).toString().equals(map.get("name"))) {map1.put(i1, map.get("java_field").toString());break;}}} else {Cell cell = row.getCell(i1);if (cell == null) {maps.put(map1.get(i1), "");} else {maps.put(map1.get(i1), "'" + cell.toString() + "'");}}if (i > 0) {// 不是标头列时,添加图片路径String path = pathMap.get(i + "_" +cellString);maps.put(map1.get(Integer.parseInt(cellString)),  "'" +  path + "'");}}if (i != 0) {list.add(maps);}}StringBuilder sql = new StringBuilder();StringBuilder sqls = new StringBuilder();try {for (Map<String, Object> stringObjectMap : list) {Set<String> strings = stringObjectMap.keySet();sql.delete(0, sql.length());sqls.delete(0, sqls.length());sqls.append("('" + UUID.randomUUID().toString().replaceAll("-", "") + "', ' "+userInfo.getUserName()+" ' , ' "+createdate+" ' , ' "+userInfo.getDeptId()+" ' ,");sql.append("insert into " + tableName + "( id ,create_user,create_date,dept_id,");for (String string : strings) {if (!"".equals(stringObjectMap.get(string))) {sql.append(string + ",");sqls.append(stringObjectMap.get(string) + ",");}}String substring = sql.substring(0, sql.length() - 1) + ") values ";String result = substring + (sqls.substring(0, sqls.length() - 1) + ")");schemaTableColumnBaseInfoEntityMapper.inserta(result);}} catch (Exception e) {e.printStackTrace();TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();return "error";}return "true";}//写入图片,并返回图片路径,key:图片坐标,value:图片路径  ( 只能单个图片)private  Map<String, String> printImg(Map<String, PictureData> sheetList) throws IOException {Map<String, String> pathMap = new HashMap();Object[] key = sheetList.keySet().toArray();/*File f = new File(path);if (!f.exists()) {f.mkdirs(); // 创建目录}*/for (int i = 0; i < sheetList.size(); i++) {// 获取图片流PictureData pic = sheetList.get(key[i]);// 获取图片索引String picName = key[i].toString();// 获取图片格式  后缀String ext = pic.suggestFileExtension();String fileName = java.util.UUID.randomUUID().toString().replaceAll("-","");byte[] data = pic.getData();ResultBody<ResultFileModel> upload = remoteFileService.upload(data, 1, applicationName, fileName+"."+ext);System.out.println(upload);if(null !=  upload && null !=  upload.getData()){String imagePath = upload.getData().getPath();Map<String,Object> mapUrl = new HashMap<>();mapUrl.put("uid",fileName);mapUrl.put("url",imagePath);mapUrl.put("fileUrl",imagePath);mapUrl.put("downloadURL",imagePath);mapUrl.put("imgURL",imagePath);mapUrl.put("state","done");mapUrl.put("name",fileName+"."+ext);mapUrl.put("pdfFileUrl", "");mapUrl.put("fileType", "ext");pathMap.put(picName, JSONObject.toJSONString(mapUrl));}}return pathMap;}//写入图片,并返回图片路径,key:图片坐标,value:图片路径( 导入一条数据 支持 多个图片,之前只能单个图片)private  Map<String, String> printImg(Map<String, List<PictureData>> sheetList) throws IOException {Map<String, String> pathMap = new HashMap();Object[] key = sheetList.keySet().toArray();for (int i = 0; i < sheetList.size(); i++) {// 获取图片索引String picName = key[i].toString();// 获取图片流List<PictureData> pics = sheetList.get(key[i]);if( null != pics && pics.size() > 0){List<Map<String,Object> > list = new ArrayList<>();for (PictureData pic : pics) {
//                    PictureData pic1 = sheetList.get(key[i]);// 获取图片格式  后缀String ext = pic.suggestFileExtension();String fileName = java.util.UUID.randomUUID().toString().replaceAll("-","");byte[] data = pic.getData();ResultBody<ResultFileModel> upload = remoteFileService.upload(data, 1, applicationName, fileName+"."+ext);if(null !=  upload && null !=  upload.getData()){String imagePath = upload.getData().getPath();Map<String,Object> mapUrl = new HashMap<>();mapUrl.put("uid",fileName);mapUrl.put("url",imagePath);mapUrl.put("fileUrl",imagePath);mapUrl.put("downloadURL",imagePath);mapUrl.put("imgURL",imagePath);mapUrl.put("state","done");mapUrl.put("name",fileName+"."+ext);mapUrl.put("pdfFileUrl", "");mapUrl.put("fileType", "ext");list.add(mapUrl);}}pathMap.put(picName, JSON.toJSON(list).toString() );}}return pathMap;}// 处理excel中的图片,分2003和2007两个版本package cn.isite90.form.server.form.service;import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.ooxml.POIXMLDocumentPart;
import org.apache.poi.ss.usermodel.PictureData;
import org.apache.poi.xssf.usermodel.*;
import org.openxmlformats.schemas.drawingml.x2006.spreadsheetDrawing.CTMarker;import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;public class ExcelUtils {/**  支持单个图片* 获取Excel2003图片* @param sheet 当前sheet对象* @param workbook 工作簿对象* @return Map key:图片单元格索引(0_1_1)String,value:图片流PictureData* @throws IOException*/public static Map<String, PictureData> getSheetPictrues03(HSSFSheet sheet, HSSFWorkbook workbook) {Map<String, PictureData> map = new HashMap<String, PictureData>();List<HSSFPictureData> pictures = workbook.getAllPictures();if (pictures.size() != 0) {for (HSSFShape shape : sheet.getDrawingPatriarch().getChildren()) {HSSFClientAnchor anchor = (HSSFClientAnchor) shape.getAnchor();if (shape instanceof HSSFPicture) {HSSFPicture pic = (HSSFPicture) shape;int pictureIndex = pic.getPictureIndex() - 1;HSSFPictureData picData = pictures.get(pictureIndex);String picIndex = String.valueOf(anchor.getRow1()) + "_" + String.valueOf(anchor.getCol1());map.put(picIndex, picData);}}return map;} else {return null;}}/*** 获取Excel2007图片* @param sheetNum 当前sheet编号* @param sheet 当前sheet对象* @return Map key:图片单元格索引(0_1_1)String,value:图片流PictureData*/public static Map<String, PictureData> getSheetPictrues07(int sheetNum, XSSFSheet sheet) {Map<String, PictureData> map = new HashMap<String, PictureData>();for (POIXMLDocumentPart dr : sheet.getRelations()) {if (dr instanceof XSSFDrawing) {XSSFDrawing drawing = (XSSFDrawing) dr;List<XSSFShape> shapes = drawing.getShapes();for (XSSFShape shape : shapes) {XSSFPicture pic = (XSSFPicture) shape;XSSFClientAnchor anchor = pic.getPreferredSize();CTMarker ctMarker = anchor.getFrom();String picIndex = ctMarker.getRow() + "_" + ctMarker.getCol();map.put(picIndex, pic.getPictureData());}}}return map;}《 =========================  下面的一个表格支持多个图片    ===========================》/**  支持多个图片* 获取Excel2003图片* @param sheet 当前sheet对象* @param workbook 工作簿对象* @return Map key:图片单元格索引(0_1_1)String,value:图片流PictureData* @throws IOException*/public static Map<String,  List<PictureData>> getSheetPictrues03s(HSSFSheet sheet, HSSFWorkbook workbook) {Map<String, PictureData> map = new HashMap<String, PictureData>();Map<String, List<PictureData>> maps = new HashMap<String, List<PictureData>>();List<HSSFPictureData> pictures = workbook.getAllPictures();List<PictureData> list = new ArrayList<>();if (pictures.size() != 0) {String picIndex = "";for (HSSFShape shape : sheet.getDrawingPatriarch().getChildren()) {HSSFClientAnchor anchor = (HSSFClientAnchor) shape.getAnchor();if (shape instanceof HSSFPicture) {HSSFPicture pic = (HSSFPicture) shape;int pictureIndex = pic.getPictureIndex() - 1;HSSFPictureData picData = pictures.get(pictureIndex);picIndex = String.valueOf(anchor.getRow1()) + "_" + String.valueOf(anchor.getCol1());list.add(picData );}}maps.put(picIndex, list);return maps;} else {return null;}}}

测试demo地址:https://download.csdn.net/download/qq_36961226/29500865

java导入带图片的excel表格(工具HSSFWorkbook-HSSFSheet)(支持一条数据(单元格)可以导入多个图片,)相关推荐

  1. 如何读取Excel表格中不同sheet表的同一位置单元格数据,并绘制条形图呢?

    作者 | 黄伟呢 来源 | 数据分析与统计学之美 今天,有位朋友在群里面咨询了一个问题:如何读取Excel表格中"不同sheet表"的同一位置单元格数据,并绘制条形图呢? 有人提议 ...

  2. html表格填充空白单元格,Excel表格数据录入:怎么快速填充所有空白单元格?

    快速填充所有空白单元格 在工作表中填充数据时,如果要填充的单元格具有某种特殊属性或单元格中数据具有特定的数据类型,还可以通过[定位条件]命令快速查找和选择目标单元格,然后输入内容. 例如,在招待费用统 ...

  3. java中使用jxl导出Excel表格详细通用步骤

    该方法一般接收两个参数,response和要导出的表格内容的list. 一般我们将数据库的数据查询出来在页面进行展示,根据用户需求,可能需要对页面数据进行导出. 此时只要将展示之前查询所得的数据放入s ...

  4. Java导出带格式的Excel数据到Word表格

    在Word中创建报告时,我们经常会遇到这样的情况:我们需要将数据从Excel中复制和粘贴到Word中,这样读者就可以直接在Word中浏览数据,而不用打开Excel文档.在本文中,您将学习如何使用Spi ...

  5. java中使用jxl导出excel表格的工具类(全网唯一亲测可用,在原来基础上扩展)

    java中后台导出excel的话,有两种方案,一是使用poi(不过由于是windows版本的,存在不兼容,但功能更多,更强大),而是使用jxl(纯java编写,不过兼容,简单一些),可以设置输出的ex ...

  6. clistctrl控件最后插入在后面_老板让我把图片放到Excel表格中,批量插入效率高...

    私信回复关键词[福利],获取丰富办公资源! 助你高效办公早下班! 大家好,我是懂点 Excel 的小E~初入「江湖」,还请大家多多关照! 今天我们来学学 Excel 图片的 6 个小技巧,满满都是干货 ...

  7. 有哪些图片转excel表格的软件?

    在日常工作中,我们常常需要对一些表格进行分析和处理.有时候,这些表格可能以图片的形式存在,这时候我们就需要将图片中的表格内容提取出来并转换为Excel表格,以便进行后续的操作和分析.通过图片转Exce ...

  8. XLSX实现导出带样式的Excel表格的坑

    XLSX导出带样式的Excel表格失败 导入XLSX xlsx-style的使用 项目的要求,需要导出一个结果到Excel表格中,因为所以,没有用Java的方式去实现,而选择了Vue前端直接导出的方式 ...

  9. word导入mysql表格,如何将excel表格导入mysql数据库【excel表格导入word太大】

    如何在excel表格中读取sql数据库数据 excel程序自带的外部功能,可以连接sql服.具体步骤为: 1.选择[数据]选项卡,在[获取外部数据]分组,找到[自其他来源]. 2.单击[自其他来源]按 ...

  10. 真的不想知道图片转excel表格怎么弄吗

    你是否曾经遇到过一张包含大量数据的图片,想要将其转换为Excel表格却不知道该怎么做?不用担心,如果你还不知道图片转excel表格怎么弄的话,那么你来对地方了.接下来我将教你三个图片转表格的方法,一起 ...

最新文章

  1. python库的使用手册_​Python 常用库之 psutil 使用指南
  2. 每个Java开发人员都应该阅读的10本书
  3. html5设置视频显示第一帧,如何检测HTML5视频何时播放第一帧?
  4. MySQL 常见的开放性问题
  5. Leetcode每日一题:24.swap-nodes-in-pairs(两两交换链表中的节点)
  6. 大数据治理平台有哪些价值
  7. 国内Maven仓库--阿里云Aliyun仓库地址及设置
  8. 历时半载,我的新课上线了
  9. 国外大神制作的史上最精简Win10系统,真有那么好用吗?
  10. scratch 打字游戏
  11. 《缠中说禅108课》44:小级别背驰引发大级别转折
  12. 考研日记-计算机技术和软件工程的比较
  13. loop与for loop分别实现乘法口诀表
  14. 芯片引脚外围电容有何作用?
  15. Rust学习笔记(13)——struct、Option和Box组合应用实现单向链表
  16. Raki的读paper小记:Named Entity Recognition without Labelled Data: A Weak Supervision Approach(半成品)
  17. 人工智能之状态空间表示法的简单应用之翻转三枚钱币
  18. 【C++从入门到踹门】第三篇:类和对象(中)类的默认成员函数
  19. 四大跨境电商平台对比:亚马逊、ebay、速卖通、wish
  20. Flutter Name source files using lowercase_with_underscores.dart

热门文章

  1. 字符串函数---atoi()函数详解及实现(完整版)
  2. 针对Android设备的开源手机银行木马BankBot / Mazain分析
  3. 通达OA工作流-流程设计
  4. Go语言获取中文及其他非英语字符长度
  5. 机械键盘的“轴”有什么区别?
  6. 【重识云原生】第六章容器基础6.4.9.6节——Service 与 Pod 的DNS
  7. 什么是数据中台系统 - whale帷幄
  8. 想成为企业疯抢的新型数通人才?华为Datacom认证喊你来学习啦
  9. 从此告别PPT制作的烦恼:ChatGPT和MindShow帮你快速完成
  10. 追加审批人样式html,更新 | 你的审批打印模板真丑!看别人用html模板怎么玩