精华内容
下载资源
问答
  • 提取excel中图片

    2021-07-26 13:34:19
    Excel里插入图片是悬浮在单元格上的,如果超出格子大小了还不能跟着排序,而单元格大小是有上限的,用openxyl也查看不到图片,所以就想办法把图片提取出来。 首先先把后缀改成zip,然后解压缩,就可以看到图片都在xl...

    Excel里插入图片是悬浮在单元格上的,如果超出格子大小了还不能跟着排序,而单元格大小是有上限的,用openxyl也查看不到图片,所以就想办法把图片提取出来。
    首先先把后缀改成zip,然后解压缩,就可以看到图片都在xl/media这个目录里放着了
    但是图片的顺序是按照插入时间来排的,并不一定是按照行列,如果你就是按顺序插入的话就可以直接用了,但如果不是的话,就还需要找到对应的行列号。
    方法就是查看xml文件,这个文件是xl/drawings/drawing1.xml,这里面包含了rowcol,还有rId,其中rId就是图片的编号了,是从1开始计数的,而rowcol分别是所在单元格的行列,是从0开始计数的,只需要写一个程序就能把他对应上了,我这里简单贴一个demo。

    # -*- coding: utf-8 -*-
    from xml.dom.minidom import parse
    import os
    import shutil
    import random 
    
    # fileList = os.listdir(inputFolder)
    questionDict = [''] * 660
    anwserDict = [''] * 660
    
    
    DOMTree=parse(r'xl/drawings/drawing1.xml')
    domList = DOMTree.documentElement
    twoCellAnchorList = domList.getElementsByTagName('xdr:twoCellAnchor')
    
    question = 0 * [660]
    for twoCellAnchor in twoCellAnchorList:
        fromList = twoCellAnchor.getElementsByTagName('xdr:from')
        from_ = fromList[0]
        rowList = from_.getElementsByTagName('xdr:row')
        row = rowList[0]
        ROW = row.firstChild
        ROW = ROW.data
    
        colList = from_.getElementsByTagName('xdr:col')
        col = colList[0]
        COL = col.firstChild
        COL = COL.data
    
        picList = twoCellAnchor.getElementsByTagName('xdr:pic')
        pic = picList[0]
        blipFillList = pic.getElementsByTagName('xdr:blipFill')
        blipFill = blipFillList[0]
        blipList = blipFill.getElementsByTagName('a:blip')
        blip = blipList[0]
        imageId = blip.getAttribute("r:embed")[3:]
    
        if COL == "0":
            questionDict[int(ROW)] = imageId
        if COL == "1":
            anwserDict[int(ROW)] = imageId
    

    我这里第一列是question,第二列是anwser,所以我这样用了两个数组来存,很容易就对应上了

    展开全文
  • 需求梳理: 在模板导入,导入的Excel可能会存在图片,这时候我们需要...//解析Excel图片方法 public Map<String, PictureData> getPictures(MultipartFile file){ String fileName = file.getOriginalFilen

    需求梳理:
    在模板导入中,导入的Excel中可能会存在图片,这时候我们需要将:
    (1)图片提取出来上传到服务器
    (2)将图片信息存储到数据库,在查询相应必检点信息时,将图片URL返回给前端
    在这里插入图片描述
    在这里插入图片描述

    首先是将图片get到,这样才能对图片的数据进行接下来的操作:

    //解析Excel图片方法
    public Map<String, PictureData> getPictures(MultipartFile file){
        String fileName = file.getOriginalFilename();
        if(StringUtil.isNotEmptyOrNull(fileName)){
            //判断文件后缀
            boolean isXlsx = fileName.contains(".xlsx");
            Map<String, PictureData> map = new HashMap<>();
            try(InputStream is = file.getInputStream()){
                Workbook wb;
                if(isXlsx){
                    // XSSFWorkbook对应.xlsx文件
                    wb = new XSSFWorkbook(is);
                    //获取第一个sheet的数据
                    List<POIXMLDocumentPart> list = ((XSSFSheet)wb.getSheetAt(0)).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;
                                //利用anchor来进行图片的位置定位
                                XSSFClientAnchor anchor = picture.getPreferredSize();
                                CTMarker marker = anchor.getFrom();
                                String key = marker.getRow()+"";
                                map.put(key,picture.getPictureData());
                                log.info(key+" - " + picture.getPictureData());//1 - Name: /xl/media/image1.jpeg - Content Type: image/jpeg
                            }
                        }
                    }
                }else {
                    // HSSFWorkbook对应.xls文件
                    wb = new HSSFWorkbook(is);
                    //获取第一个sheet的页面中的数据
                    List<HSSFShape> list = ((HSSFSheet) wb.getSheetAt(0)).getDrawingPatriarch().getChildren();
                    for (HSSFShape shape : list) {
                        if (shape instanceof HSSFPicture) {
                            HSSFPicture picture = (HSSFPicture) shape;
                            //利用Anchor进行图片的位置定位
                            HSSFClientAnchor cAnchor = (HSSFClientAnchor) picture.getAnchor();
                            PictureData pdata = picture.getPictureData();
                            String key = cAnchor.getRow1() + ""; // 行号(左上角)
                            // cAnchor.getCol1(); //列号(左上角)
                            map.put(key, pdata);
                            log.info(key+" - " + pdata.toString());
                        }
                    }
                }
                return map;
            }catch (Exception e){
                throw new BusiException("图片解析异常",e);
            }
        }else {
            throw new BusiException("文件上传失败!");
        }
    }
    

    我们要的数据都在pictureData中,包括图片流、图片索引、图片后缀名。接下来就是将其用相应的方法提取出来:

    //导入Excel中的图片
    public void uploadExcelPhoto(MultipartFile file) throws Exception {
        Map<String, PictureData> pictureMap = getPictures(file);
        //遍历Map----笔记:遍历map的四种方法
        for(Map.Entry<String, PictureData> entry : pictureMap.entrySet()){
            //获取图片流
            PictureData pic = entry.getValue();
            //获取图片索引
            String picName = entry.getKey();
            //获取图片格式
            String ext = pic.suggestFileExtension();
    
            //存储图片流
            byte[] data = pic.getData();
    
            FileOutputStream os = new FileOutputStream("c:\\test\\"+picName+"."+ext);
            os.write(data);
            os.close();
    
        }
    

    在这里插入图片描述
    在这里插入图片描述

    提取到本地成功,那么上传到服务器,存储图片信息到数据库也都是可行的操作。

    展开全文
  • 使用Python + Apache POI提取Excel中图片 最近在做一个python项目,项目的有一部分是要提取Excel中的文本与图片。 之前的需求只是提取Excel中的文本,这个功能的实现比较简单,在python的官网有几...

    最近在做一个python项目,项目的有一部分是要提取Excel中的文本与图片。

    之前的需求只是提取Excel中的文本,这个功能的实现比较简单,在python的官网有几个库可供选用,比如xlrd,openpyxl等。

    后来需求要求将Excel中的图片提取出来。我尝试过使用openpyxl去提取,但是发现openpyxl并没有读取Excel文件的图片信息,只有文本--用openpyxl打开一个有图片的Excel,然后再保存这个Excel,你会发现图片丢失了。网上有很多python库,基本上只介绍了如何去写Excel文件,读的却非常少。因为目标平台是Linux,故Win32COM/自动化也不在考虑之中。

    最后从Android操作Excel的项目中得到启示,Android中使用Apache POI实现对Excel的操作,Apache POI是纯Java的代码,依赖于jre,而jre在Linux和Windows上面都可以运行,于是就有了这个方案:将POI编译成可执行文件,在目标机器上安装jre,然后让python通过命令行调用这个可执行程序,从而实现对特定Excel的图片提取。

    相对于其他的python的Excel库,POI功能比较完善,除了Excel,还可以处理其他的Microsoft Office文档。不足的地方是需要jre的支持。

    个人认为这是一个可行方案之一,跨平台并且省时省力。不知道还有没有其他更好的方案。

    参考资料:xlrd的百度百科xlrd的官网openpyxl官网Apache POI官网

    posted on 2015-10-10 18:04 魏小田 阅读( ...) 评论( ...) 编辑 收藏

    转载于:https://www.cnblogs.com/martinwei/p/4867870.html

    展开全文
  • 用以下命令从Excel 中提取图片,不能全部图片,每次不显示的图片编号还不一样。求高手指教。谢谢。 Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet Set...
  • Java提取EXCEL图片重命名并改变像素大小项目源代码, Java提取EXCEL图片重命名并改变像素大小, Java提取EXCEL图片重命名并改变像素大小
  • C# 提取Excel形状的文本和图片

    千次阅读 2017-12-25 10:26:35
    在之前的一篇文章我介绍了如何给Excel添加,并给形状填充文本和图片,今天这篇文章我将介绍如何从形状中提取填充的文本和图片

    在之前的一篇文章中我介绍了如何给Excel添加形状并给形状填充文本和图片,今天这篇文章中我将介绍如何从形状中提取填充的文本和图片。该方案需要使用Spire.XLS组件


    原文档截图如下:



    创建一个C#程序,引用Spire.Xls.dll文件,并参考以下步骤:

    步骤1:加载Excel文档。

    Workbook workbook = new Workbook();
    workbook.LoadFromFile("AddShapes.xlsx");

    步骤2:获取第一个工作表。

    Worksheet sheet = workbook.Worksheets[0];

    步骤3:从第一个形状中提取文本并保存到txt文件中。

    IPrstGeomShape shape1 =sheet.PrstGeomShapes[0];           
    string s = shape1.Text;
    StringBuilder sb = new StringBuilder();
    sb.AppendLine(s);
    File.WriteAllText("ShapeText.txt",sb.ToString());

    步骤4:从第二个形状中提取图片并保存到本地文件夹。

    IPrstGeomShape shape2 =sheet.PrstGeomShapes[1];
    Image image = shape2.Fill.Picture;                       
    image.Save(@"Image\ShapeImage.png",ImageFormat.Png);

    提取的文本:



    提取的图片:


    完整代码:

    //加载Excel文档
    Workbook workbook = new Workbook();
    workbook.LoadFromFile("AddShapes.xlsx");
     
    //获取第一个工作表
    Worksheet sheet = workbook.Worksheets[0];
     
    //从第一个形状中提取文本并保存到txt文件中
    IPrstGeomShape shape1 =sheet.PrstGeomShapes[0];           
    string s = shape1.Text;
    StringBuilder sb = new StringBuilder();
    sb.AppendLine(s);
    File.WriteAllText("ShapeText.txt",sb.ToString());
     
    //从第二个形状中提取图片并保存到本地文件夹
    IPrstGeomShape shape2 =sheet.PrstGeomShapes[1];
    Image image = shape2.Fill.Picture;                       
    image.Save(@"Image\ShapeImage.png",ImageFormat.Png);



    展开全文
  • 小雅用的是Excel2013版本,给大家分享快速提取Excel工作簿内所有图片的方法。由于原工作表图片数过大,为了方便讲解,省略为如下图片。大概的将操作步骤说明一下:将Excel文件重命名为ZIP压缩包。解压压缩包,将\xl\...
  • ![图片说明](https://img-ask.csdn.net/upload/201812/01/1543640683_855860.png) 如图,怎样把每一行划红线的部分提取出来?
  • 小机房里装的office2013 顿时我从excel中提取图片的代码就用不了了 找了一上午资料终于在stackoverflow上找到办法 贴代码: public void ReadPic(string path,List noDataList) { try {
  • 【注意】:图片必须在单元格内,不能压过单元格边界 from openpyxl import load_workbook from openpyxl_image_loader import SheetImageLoader path = r'C:/Users/an/Desktop/guang2/' # Excel文件路径 saveDir = ...
  • 提取Excel中特定间隔的数据

    千次阅读 2018-05-07 09:48:10
    主要是对Excel中数据进行处理,D列主要是对D列数据求一个平均值,fty1-fty2000张图片,每张图片有60人对其进行打分,D1=AVERAGE(C1:C60),然后选中D2,在fx的左边方框输入D1:D120000,按下ENTER键,然后基本上全部...
  • 其中A列为图片名称,B列为图片,格式如下: 要求编写Python程序,批量提取B列所有图片,并分别以同一行A列字符串作为图片文件名称进行保存。 准备工作: 安装扩展库openpyxl和openpyxl_image_loader。 参考代码: ...
  • = '': unzip_msg=unzip_file(zip_file_path)ifunzip_msg: read_img(zip_file_path,img_path)#main if __name__ == '__main__':#excel地址 excel_path = 'C:\\Users\\SHEIN\\Desktop\\test\img.xlsx' #图片目录 img_...
  • 在这里插入图片描述
  • ![图片说明]...Excel中的数据形式如图,然后提取出相应的信息填充到txt文件,引号的数据是根据excel中的内容生成的,引号外的是不变的。想请各位大佬告知用什么工具可以实现,代码咋写
  • 1、vbs 遍历windows目录 2、vbs 读取WORD,提取word的附件EXCEL; 3、vbs 读取EXCEL,修改EXCEL中的内容; 4、vbs 将EXCEL中的内容导入数据库 5、vbs 操作文件:打开、移动;
  • excel中批量提取超链接.可以把网页的超级链接提取出来。
  • Java提取EXCEL图片重命名并改变像素大小jar包,
  • 原文:使用NPOI从Excel中提取图片图片位置信息问题背景: 话说,在ExcelReport的开发过程,有一个比较棘手的问题:怎么复制图片呢? 当然,解决这个问题的第一步是:能使用NPOI提取图片图片的位置信息。到...
  • EXCEL的超链接批量提取图片

    千次阅读 2020-10-10 11:13:26
    目标:将excel中如下形式的超链接图片批量提取出来 首先在excel中打开宏窗口,编写如下程序行并运行,这样我们就得到了具体的链接地址 Sub 提取超链接() For Each cell In Range("D2:D39") cell.Offset(0, 1)=cell....
  • ") exit(1) uDir = input("Enter your directory: ") extractPicsFromDir(uDir) 解决方案 Excel files are in the form of zip file.It is easy to extract images from excel or docx file: import zipfile from ...
  • 有一个excel数据表格,我想把我需要的数据提取出来写成另一个excel。 ![图片说明](https://img-ask.csdn.net/upload/201907/26/1564104667_985651.png) 如图,这是表格的一列数据,我想把只含有P115的行数据...
  • 这个程序还是挺有成就感的,应为它帮我提取了近4000行的Excel属性、方法、事件的说明。原格式:提取后的格式:我感觉原格式就是通过批量插入备注的方式制作而成的,而被我通过VBA代码给复原了,一不小心完成了一个...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 13,725
精华内容 5,490
关键字:

怎样提取excel中的图片