当前位置: 首页 > news >正文

Android修行手册-实现利用POI将图片插入到Excel中(文末送书)

  • 点击跳转=>Unity3D特效百例
  • 点击跳转=>案例项目实战源码
  • 点击跳转=>游戏脚本-辅助自动化
  • 点击跳转=>Android控件全解手册
  • 点击跳转=>Scratch编程案例
  • 点击跳转=>软考全系列

👉关于作者

专注于Android/Unity和各种游戏开发技巧,以及各种资源分享(网站、工具、素材、源码、游戏等)
有什么需要欢迎底部卡片私我,交流让学习不再孤单

在这里插入图片描述

👉实践过程

😜问题

前两天有个小工具的开发,实现自动化将Excel中的图片链接Down下来然后插入到Excel表格中。朋友一直维护着任务类的(就那种打分评分啊,刷好评啊那些)。她量大,需要审核,靠人力实在是劳累。所以我研究了自动化。

😜解决

实现插入图片有两种方式

方式一

直接插入到指定单元格,该方式适用于 Java 端,也就是在 PC上用,Android 因为缺少 resize的内容会报错。博主没找那么多资料看如何解决,我就直接用了方式二,支持Android的。

    /*** @param workbook  workbook对象* @param sheet   工作簿对象* @param fileUrl  URL* @param row  第多少行* @param col  第多少列* @param scaleX   X轴* @param scaleY   Y轴*/public static void picture2(Workbook workbook, Sheet sheet, String fileUrl, int row, int col, double scaleX, double scaleY) {try {//防止URL地址有中文,解码String head = fileUrl.substring(0, fileUrl.lastIndexOf("/")+1);String suffix = fileUrl.substring(fileUrl.lastIndexOf("/")+1);String link = head + URLEncoder.encode(suffix,"UTF-8");URL url = new URL(link);  // 构造URLURLConnection con = url.openConnection(); // 打开连接con.setConnectTimeout(8 * 1000);   //设置请求超时InputStream is = con.getInputStream();  // 输入流byte[] bytes = IOUtils.toByteArray(is);@SuppressWarnings("static-access")int pictureIdx = workbook.addPicture(bytes, workbook.PICTURE_TYPE_PNG); //参数二是图片格式 还有jpg格式等CreationHelper helper = workbook.getCreationHelper();Drawing drawing = sheet.createDrawingPatriarch();ClientAnchor anchor = helper.createClientAnchor();anchor.setCol1(col); // 图片插入坐标anchor.setRow1(row);Picture pict = drawing.createPicture(anchor, pictureIdx); // 插入图片pict.resize(scaleX, scaleY);  // 这个方法在 Android 端会造成崩溃。} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}

方式二

虽然复杂点,但是无论是多端还是定制性都更强一些。该方式是插入坐标,坐标稍微复杂些。

    public static void picture(Workbook workbook, Sheet sheet, String fileUrl, String fileType, int row, int col) {try {Drawing patriarch = sheet.createDrawingPatriarch();URL url = new URL(fileUrl);  // 构造URLURLConnection con = url.openConnection();   // 打开连接con.setConnectTimeout(8 * 1000);  //设置请求超时InputStream is = con.getInputStream();    // 输入流ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();BufferedImage bufferImg = ImageIO.read(is);ImageIO.write(bufferImg, "JPEG", byteArrayOut);bufferImg.flush();byteArrayOut.flush();XSSFClientAnchor anchor = new XSSFClientAnchor(0, 0, 0, 0,( short ) 0, 0, ( short ) 5, 8);patriarch.createPicture(anchor, workbook.addPicture(byteArrayOut.toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG));   //参数二是图片格式 还有png格式等} catch (Exception e) {e.printStackTrace();}}

主要解释一下定位图片位置函数 ClientAnchor 的八个参数int dx1, int dy1, int dx2, int dy2, short col1, int row1, short col2, int row2
前四个表示的是 excel 边框的内距离,我们通常情况下都是0。
在这里插入图片描述
在这里插入图片描述
重点要看后四个参数
short col1, int row1, short col2, int row2
前两个表示图片左上角所在的单元格左上角的位置,这个不难理解。
后两个表示图片右下角所在的单元格左上角的位置,这个要特别留意
在这里插入图片描述
在这里插入图片描述
横向的 A B C D列 是从0开始数的,图中 C是 2 竖着的是 4 ,自然起始左上角就是 2 ,4 。 右下角是同理

👉其他

📢作者:小空和小芝中的小空
📢转载说明-务必注明来源:https://zhima.blog.csdn.net/
📢这位道友请留步☁️,我观你气度不凡,谈吐间隐隐有王者霸气💚,日后定有一番大作为📝!!!旁边有点赞👍收藏🌟今日传你,点了吧,未来你成功☀️,我分文不取,若不成功⚡️,也好回来找我。

👑评论区抽奖送书

最后在评论区进行抽取三名幸运的小伙伴 送下面这本书籍
在这里插入图片描述

笔者(博哥)具有10多年的开发经验,2017年开始做算法试题并在公众号发布试题讲解,经常游走在全球30多个算法网站之间,累计做题2000多道,对算法试题有自己独特的解题思路和技巧。

笔者写这本书的初衷是希望能够帮助更多的程序员快速学习算法,我们都知道算法在整个IT行业算是比较难的,之前有很过程序员通过公众号加笔者微信,请教关于算法的题,刚开始笔者一一进行了回复,后来随着咨询量越来越大,笔者意识到大家迫切地需要算法相关知识的系统指导。结合笔者过往的写作和从业经历,便着手写一本算法书籍,希望能欧帮助大家更好地学习算法,于是这本《算法秘籍》就诞生了。

🎁抽奖规则

给本篇博客文章点赞 收藏 评论三连,在文章发文5天后,我会将三连的朋友放到随机抽奖小工具中抽取并进行公布。中的几率还是很大的哦~ 想看书的小伙伴参与起来!
没抽到的,但是喜欢这本书的小伙伴也可以在网上自行购买哈,官方正品商店购买即可!

🎄推荐理由(⭐⭐⭐⭐⭐)

在这里插入图片描述

温馨提示点击下方卡片获取更多意想不到的资源。
空名先生

相关文章:

Android修行手册-实现利用POI将图片插入到Excel中(文末送书)

点击跳转>Unity3D特效百例点击跳转>案例项目实战源码点击跳转>游戏脚本-辅助自动化点击跳转>Android控件全解手册点击跳转>Scratch编程案例点击跳转>软考全系列 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分享&…...

低功耗工业RFID设备应用

随着工业自动化的迅速发展,RFID技术也在工业领域得到了广泛的应用,在近距离非接触读写应用时,常常利用低功耗的工业RFID设备来进行识别,下面我们将详细介绍低功耗工业RFID设备的应用。 低功耗工业RFID设备具有功耗低、体积小、重量…...

# Oracle 库常见问题排查

Oracle 库常见问题排查 文章目录 Oracle 库常见问题排查查询数据库的相关信息查看正在执行的语句杀掉正在执行的sql查看未提交的事务查看锁表 查询数据库的相关信息 查看正在执行的语句 SELECT s.sid, s.serial#, s.username, s.status, s.sql_id, s.sql_child_number, sq.sq…...

矩阵乘积的迹对矩阵求导

说明 有时候为了输入方便,B和都代表B的转置。 矩阵的在线计算有个网站可以参考:Matrix Calculus dtr(AB)/dAB 下面用一个例子来证明。 dtr(ABA)/dAABAB 下面用一个例子来证明: 因为我们要求ABA的迹,所以为了简便,我们…...

IP 地址冲突检测工具

IP 冲突是一个术语,用于表示同一网络或子网中尝试使用相同 IP 地址的两个或多个设备的状态,这可能会导致发往特定主机的通信与其他主机混淆,因为两者都使用相同的 IP,为了避免这种情况,某些主机在发生 IP 冲突时会失去…...

js树形数组遍历练习,扁平化、格式化、获取节点父级

1.树形数组扁平化 数组扁平化的方式很多,这里主要是用递归处理,除此之外还有正则、扩展运算符等等 const list [{name:1,id:1,children:[{name:11,id:11,children:[{name:111,id:111}]},{name:12},]},{name:2,id:2,children:[{name:21,id:21,children:…...

c语言贪吃蛇项目的实现

ncurse的引入 ncurse的概念 ncurse(new curses)是一套编程库,它提供了一系列的函数,以便使用者调用它们去生成基于文本的用户界面。 ncurses是一个能提供功能键定义(快捷键),屏幕绘制以及基于文本终端的图形互动功能的动态库。ncurses用得最多的地方是…...

IDEA运行前端vue项目,安装nodejs,以及配置

我在刚接手到一个项目的时候,不知道前端的代码的情况下,想要写后端代码,遇到问题 所以需要看前台代码,着手IDEA 开始 安装nodejs (为什么要安装nodejs呢,首先就是说需要npm, 而nodejs 内置npm) 1.从官网下载 nodej…...

SAP S4后的一些注意点(一)(更新中)

SAP 此外,我们必须确保 P10 中所有新的 Unicore 代码都是云就绪的。因此,在 ATC 中增加了一项新的检查(自定义),以证明代码的云就绪性。此外,我们还在 ADT 中安装了一个名为 ABAP Cleaner 的新插件&#xf…...

Python高级语法----深入asyncio:构建异步应用

文章目录 异步I/O操作示例:异步网络请求异步任务管理示例:并发执行多个任务使用异步队列示例:生产者-消费者模式在现代软件开发中,异步编程已经成为提高应用性能和响应性的关键技术之一。Python的asyncio库为编写单线程并发代码提供了强大的支持。本文将深入探讨asyncio的三…...

5-爬虫-打码平台、打码平台自动登录打码平台、selenium爬取京东商品信息、scrapy介绍安装、scrapy目录结构

1 打码平台 1.1 案例 2 打码平台自动登录打码平台 3 selenium爬取京东商品信息 4 scrapy介绍安装 5 scrapy目录结构 1 打码平台 # 1 登录某些网站,会有验证码---》想自动破解-数字字母:python模块:ddddocr-计算题,成语题&#xf…...

HTTPS 的工作原理是什么?

HTTPS(HyperText Transfer Protocol Secure)是一种通过加密和认证保护数据传输安全的通信协议。它是基于传统的 HTTP 协议,通过使用 SSL(Secure Sockets Layer)或 TLS(Transport Layer Security&#xff09…...

【STM32】TIM2的PWM:脉冲宽度调制

PWM是一种周期固定,脉宽可调整的输出波形。 0.通用寄存器输出 1.捕获/比较通道1的主电路--中间部分 2.捕获/比较通道的输出部分--输出 3.通用定时器输出PWM原理 PWM波周期或者频率由ARR(就是要进递增/递减的值)决定,PWM波占空比由…...

DRF 学习

一、安装DRF 1、pip install djangorestframework -i https://pypi.douban.com/simple 2、pip install pymysql -i https://pypi.douban.com/simple 二、创建Django项目 1、django-admin startproject drfdemo 三、添加rest_framework应用 1、INSTALLED_APPS …...

2023年双11有哪些便宜的云服务器值得推荐?

每年的双11期间各大云计算服务商都会推出特价云服务器,今年自然也不例外,下面给大家分享2023年双11有哪些便宜的云服务器值得推荐。 1、阿里云【传送门>>>】 阿里云双11推出了金秋云创季活动,2核2G3M不限流量,1年99元&…...

[Java/力扣160]相交链表

这道题的关键是,使两个链表上的指针同时到达相交点处 方法一:分别遍历两个链表,得到其长度。然后先让较长的链表上的指针走“两链表长度之差”。然后两指针分别一步一步走,就能同时到达相交点处。 方法二:让 p1 遍历…...

LLVM学习笔记(60)

4.4.3. X86Subtarget 在X86TargetMachine构造函数的105行调用了X86Subtarget构造函数来创建具体的目标机器对象。 4.4.3.1. FMV的支持(v7.0) V7.0将具体目标机器对象的生成推迟到第一次调用getSubtarget ()时才创建。不过,为了方便起见&am…...

Linux命令查看pcap包报文数量、包体包含内容、包长

查看pcap包内容 要查看pcap文件中的包数量,可以使用网络分析工具,如Wireshark或Tcpdump,或者使用编程语言中的网络分析库,如Python中的Scapy或Sniffy。 使用Wireshark的方法如下: 打开Wireshark软件。选择要查看的p…...

C++二分算法: 找出第 K 小的数对距离

题目 数对 (a,b) 由整数 a 和 b 组成&#xff0c;其数对距离定义为 a 和 b 的绝对差值。 给你一个整数数组 nums 和一个整数 k &#xff0c;数对由 nums[i] 和 nums[j] 组成且满足 0 < i < j < nums.length 。返回 所有数对距离中 第 k 小的数对距离。 示例 1&#x…...

【计算机网络笔记】网络层服务模型——虚电路网络

系列文章目录 什么是计算机网络&#xff1f; 什么是网络协议&#xff1f; 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能&#xff08;1&#xff09;——速率、带宽、延迟 计算机网络性能&#xff08;2&#xff09;…...

JavaSec-RCE

简介 RCE(Remote Code Execution)&#xff0c;可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景&#xff1a;Groovy代码注入 Groovy是一种基于JVM的动态语言&#xff0c;语法简洁&#xff0c;支持闭包、动态类型和Java互操作性&#xff0c…...

C++初阶-list的底层

目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者

抖音增长新引擎&#xff1a;品融电商&#xff0c;一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中&#xff0c;品牌如何破浪前行&#xff1f;自建团队成本高、效果难控&#xff1b;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 &#xff08;忘了有没有这步了 估计有&#xff09; 刷机程序 和 镜像 就不提供了。要刷的时…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云

目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展&#xff0c;光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域&#xff0c;IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选&#xff0c;但在长期运行中&#xff0c;例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

【Oracle】分区表

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)

在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马&#xff08;服务器方面的&#xff09;的原理&#xff0c;连接&#xff0c;以及各种木马及连接工具的分享 文件木马&#xff1a;https://w…...