使用 openpyxl 可以实现更精确的图像放置吗? (像素坐标而不是单元坐标?)

2023-12-03

我正在尝试复制和自动化工作中常用的实践:我正在尝试在 openpyxl 的单元格中放置多个图像和文本,但是我只能将图像锚定到单元格的左上角,并且还没有找到比这更准确定位的方法。所以它们最终会与彼此和文本重叠。

from openpyxl import Workbook
from openpyxl.drawing.image import Image

wb = Workbook()
ws = wb.active
img = Image('image.png')
ws.add_image(img, 'B2') # img.anchor is now 'B2'
wb.save('test.xlsx')

在上述情况下为“B2”。我还没有找到任何方法让它获取(或转换)像素坐标。但如果我能做到这一点,那么我想我可以将单元格内的图像和文本格式化为清晰/可接受(如果不漂亮)的水平。

Mock example of eventual desired output

Neither openpyxl.drawing.image nor openpyxl.worksheet.worksheet有一个我能看到的绝对锚定方法。openpyxl.drawing.spreadsheet_drawing确实如此,但我不确定是否或如何使用它。

有没有办法做到这一点?还是我忽略了另一种方法来实现这个目标?


(编辑:这是使用 Python 3.7 和 openpyxl 2.6.1)

因此,我打开将输出 excel 文件重命名为 zip 文件,并在那里找到“drawing1.xml”,我可以看到它正在使用 OneCellAnchor。因此,按照 Charlie 的建议,我深入研究了 openpyxl 代码,发现有一个我可以使用的 AbsoluteAnchor 类。为了设置位置,我需要导入 XDR 坐标,然后从 utils.units 中导入一些从像素/厘米到 EMU 的转换函数(excel 测量单位?)。然后我将图像锚点设置为绝对并给出位置和“ext”(尺寸)。

from openpyxl import Workbook
from openpyxl.drawing.image import Image
from openpyxl.drawing.spreadsheet_drawing import AbsoluteAnchor
from openpyxl.drawing.xdr import XDRPoint2D, XDRPositiveSize2D
from openpyxl.utils.units import pixels_to_EMU, cm_to_EMU

wb = Workbook()
ws = wb.active
img = Image('image.png')

p2e = pixels_to_EMU

h, w = img.height, img.width

position = XDRPoint2D(p2e(500), p2e(500))
size = XDRPositiveSize2D(p2e(w), p2e(h))

img.anchor = AbsoluteAnchor(pos=position, ext=size)
ws.add_image(img) 
wb.save('test.xlsx')

但这仍然很麻烦,因为我需要知道我想要放置的每个图像的绝对坐标...理想情况下,我仍然希望它锚定到一个单元格,但随后能够在单元格内更精细地移动它。就在那时我注意到 OneCellAnchor 有一个偏移量参数。这太完美了,然后我用测量的默认 Excel 单元格的厘米高度和宽度制作了 lambda 函数。

from openpyxl.drawing.spreadsheet_drawing import OneCellAnchor, AnchorMarker

c2e = cm_to_EMU

# Calculated number of cells width or height from cm into EMUs
cellh = lambda x: c2e((x * 49.77)/99)
cellw = lambda x: c2e((x * (18.65-1.71))/10)

# Want to place image in row 5 (6 in excel), column 2 (C in excel)
# Also offset by half a column.
column = 2
coloffset = cellw(0.5)
row = 5
rowoffset = cellh(0.5)

marker = AnchorMarker(col=column, colOff=coloffset, row=row, rowOff=rowoffset)
img.anchor = OneCellAnchor(_from=marker, ext=size)
ws.add_image(img) 
wb.save('test.xlsx')

其产生:

enter image description here

完美的!正是我正在寻找的精度:)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 openpyxl 可以实现更精确的图像放置吗? (像素坐标而不是单元坐标?) 的相关文章

  • 在Python3.6中调用C#代码

    由于完全不了解 C 编码 我希望在我的 python 代码中调用 C 函数 我知道有很多关于同一问题的问答 但由于一些奇怪的原因 我无法从示例 python 模块导入简单的 c 类库 以下是我所做的事情 C 类库设置 我使用的是 VS 20
  • Tensorflow 可变图像输入大小(自动编码器、放大......)

    Edit WARNING不建议使用不同图像大小的图像 因为张量需要具有相同的大小才能实现并行化 我一直在寻找解决方案 了解如何使用不同大小的图像作为神经网络的输入 Numpy 第一个想法是使用numpy 然而 由于每个图像的大小不同 我无法
  • Python 3 __getattribute__ 与点访问行为

    我读了一些关于 python 的对象属性查找的内容 这里 https blog ionelmc ro 2015 02 09 understanding python metaclasses object attribute lookup h
  • 如何使用Python将WebP图像转换为Gif?

    我已经尝试过这个 from PIL import Image im Image open this webp im save that gif gif save all True 这给了我这个错误 类型错误 不支持的操作数类型 tuple
  • python 中分割字符串以获得一个值?

    需要帮助 假设我在名为 input 的变量中有一个字符串 Sam Person name kind input split 通过执行上述操作 我得到两个具有不同字符串 Sam 和 Person 的变量 有没有办法只获取第一个值 name S
  • Python BeautifulSoup XML 解析

    我编写了一个简单的脚本来使用 BeautifulSoup 模块解析 XML 聊天日志 标准 soup prettify 工作正常 只是聊天日志中有很多绒毛 您可以在下面看到我正在使用的脚本代码和一些 XML 输入文件 Code import
  • Pandas重置索引未生效[重复]

    这个问题在这里已经有答案了 我不确定我在哪里误入歧途 但我似乎无法重置数据帧上的索引 当我跑步时test head 我得到以下输出 正如您所看到的 数据帧是一个切片 因此索引超出范围 我想做的是重置该数据帧的索引 所以我跑test rese
  • 为什么 Python 中的“pip install”会引发语法错误?

    我正在尝试使用 pip 安装软件包 我试着跑pip install从Python shell 但我得到了SyntaxError 为什么我会收到此错误 如何使用 pip 安装软件包 gt gt gt pip install selenium
  • 如何限制Django CreateView中ForeignKey字段的选择?

    我有一个沿着这些思路的模型结构 models py class Foo models Model class Bar models Model foo models ForeignKey Foo class Baz models Model
  • Python igraph:从图中删除顶点

    我正在使用安然电子邮件数据集 并尝试删除没有 enron com 的电子邮件地址 即我只想拥有安然电子邮件 当我尝试删除那些没有 enron com 的地址时 一些电子邮件由于某些原因被跳过 下面显示了一个小图 其中顶点是电子邮件地址 这是
  • “char”/“character”类型的类型提示

    char 或 character 没有内置的原始类型 因此显然必须使用长度为 1 的字符串 但是为了暗示这一点并暗示它应该被视为一个字符 如何通过类型提示来实现这一点 grade chr A 一种方法可能是使用内置的 chr 函数来表示这一
  • 在径向(树)网络x图中查找末端节点(叶节点)

    给定下图 是否有一种方便的方法来仅获取末端节点 我所说的端节点是指那些具有一个连接边的到节点 我认为这些有时被称为叶节点 G nx DiGraph fromnodes 0 1 1 1 1 1 2 3 4 5 5 5 7 8 9 10 ton
  • matplotlib matshow 标签

    我一个月前开始使用 matplotlib 所以我仍在学习 我正在尝试用 matshow 制作热图 我的代码如下 data numpy array a reshape 4 4 cax ax matshow data interpolation
  • 如何在python中检索aws批处理参数值?

    流程 Dynamo DB gt Lambda gt 批处理 如果将角色 arn 插入动态数据库 它是从 lambda 事件中检索的 然后使用submit job角色 arn 的 API 被传递为 parameters role arn ar
  • 更改 pandas 中多个日期时间列的时区信息

    有没有一种简单的方法可以将数据帧中的所有时间戳列转换为本地 任何时区 不是逐列进行吗 您可以有选择地将转换应用于所有日期时间列 首先 选择它们select dtypes https pandas pydata org pandas docs
  • 如何在Python和Selenium中通过标签名称或id获取元素[重复]

    这个问题在这里已经有答案了 我正在尝试使用 Python 和 Selenium 获取输入 但它向我显示错误 我该如何解决这个错误 inputElement send keys getStock getStocklFunc 0 Error i
  • conda-env list / conda info --envs 如何查找环境?

    我一直在尝试 anaconda miniconda 因为我的用户使用随 miniconda 安装的结构生物学程序 并且作者都没有 A 考虑到可能存在其他 miniconda 应用程序 B 他们的程序将在多用户环境中使用 因此 使用 Arch
  • Airflow Python 单元测试?

    我想为我们的 DAG 添加一些单元测试 但找不到任何单元测试 有 DAG 单元测试框架吗 有一个端到端的测试框架存在 但我猜它已经死了 https issues apache org jira browse AIRFLOW 79 https
  • 如何将列表字典写入字符串而不是 CSV 文件?

    This 堆栈溢出问题 https stackoverflow com questions 37997085 how to write a dictionary of lists to a csv file将列表字典写入 CSV 文件的答案
  • Django South - 将 null=True 字段转换为 null=False 字段

    我的问题是 转变的最佳做法是什么null True场变成null False使用 Django South 的字段 具体来说 我正在与ForeignKey 你应该先写一个数据迁移 http south aeracode org docs t

随机推荐

  • 单成员结构的灵气属性传播问题

    我遇到了 Spirit Qi 的编译问题 它抱怨说值类型不是以下成员标识符 由于某种原因 Qi 的属性系统将标识符视为容器类型 并尝试枚举它的值类型 这是一个类似的问题这个问题 但是 我相信原因是单个成员结构和may与此有关bug incl
  • 如何为应用程序的容器使用相同的凭证处理程序配置来生成新的密码哈希值?

    我的 Web 应用程序的上下文定义类似于
  • php 文本中最常用的单词

    我在 stackoverflow 上找到了下面的代码 它可以很好地查找字符串中最常见的单词 但我可以排除对 a if you have 等 等常用词的计数吗 或者我必须在计数后删除元素吗 我该怎么做 提前致谢
  • Android BLE 血糖通知

    我厌倦了使用 Android BLE SDK 与我的 Glucose 设备进行通信 我需要 UUID 2a18 和 2a34 的 setCharacteristicNotification 我参考Android官方SDK如下 http de
  • 错误:[Dagger/MissingBinding] Map、Provider>

    我有 Dagger MissingBinding 的问题 我在 stackoverflow 上红色了所有相关答案 我尝试使用不同版本的 kotlin gradle dagger 我尝试使用不同的解决方法 例如kapt correctErro
  • Crystal Reports:数据库登录失败

    我在 ASP NET C 中有一个应用程序 其中使用 Sap Crystal Reports for Visual Studio 在 VS 中一切都很完美 但是当我将其部署到 IIS 时 出现 数据库登录失败 错误 当我设置 Crystal
  • Access 中的 SELECT @@IDENTITY 始终返回 0

    我一直在努力寻找解决这个问题的方法 但到目前为止没有任何效果 private void Insert string ConnectionStringAccess Provider Microsoft ACE OLEDB 12 0 Data
  • 跨页面发布

    我只是尝试跨页面发布的示例 我已添加 1 个文本框和 1 个按钮到 default aspx 页面
  • 强制下线所有在线用户中的特定用户

    在我的网站管理员可以查看所有其他在线用户的列表 管理员还可以禁用该列表中的任何帐户 到目前为止一切都很顺利 但现在我决定注销被禁用的用户 如何对上述指定在线用户列表中的特定用户进行注销操作 注意 我对 SQL Server 数据库使用默认成
  • jQuery:获取表中的所有输入值并序列化

    给定以下表结构 当 button被点击了 table tr td td tr table
  • GMail fsockopen():Codeigniter 和 XAMPP 的 SSL 操作失败错误

    错误消息 1 消息 fsockopen SSL 操作失败 代码为 1 OpenSSL 错误消息 错误 14090086 SSL 例程 ssl3 get server certificate 证书验证失败 文件名 库 Email php 线路
  • 如何阻止 r devtools::check() 注意到 .DS_Store

    每次我跑步devtools check 在我的包裹上有一条注释 gt checking for non standard things in the check directory NOTE Found the following file
  • 表格输出 JavaScript 打印不正确

    我正在开发一个项目 该项目将根据当前余额 利率和每月还款确定还清信用卡的时间和支付的利息 我已经能够让我的代码为我提供正确的余额 利息和最低还款额 一直到显示的最后几行 我在让我的表执行正确的输出时遇到了一些麻烦 我尝试过改变一些东西 但它
  • 如何在shell脚本中使用加密和解密的密码

    我正在编写一个 shell 脚本 它执行需要密码的命令 我无法在脚本中以纯文本形式输入密码 我读到了 openssl 加密解密机制 但为了再次加密文件 我需要一个密码 我又无法将其放入脚本中 我不知道让脚本使用安全密码执行命令的最佳方法是什
  • 如何使用 Trollop 制作 Ruby 脚本进行命令行解析? [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我最近开始使用Trollop 一个干净而优雅的命令行选项解析器 适用于我所有基于 Ruby 的小型命令行 hack 我发现它确实很容易使用 但入门很困难 尽管有很好的在线文档 但
  • 如何通过python使用gensim的word2vec模型计算句子相似度

    根据Gensim Word2Vec 我可以使用gensim包中的word2vec模型来计算2个单词之间的相似度 e g trained model similarity woman man 0 73723527 然而 word2vec 模型
  • CSS 中的媒体片段 URI 替代方案?

    因此 我希望使用 Sprite Sheet 在 CSS 中制作背景图像 澄清一下 不 我不会去这个效果 我有一个完整的精灵表 我想在该表上取一个 16px x 16px 的正方形 并将其设置为将重复的背景 在未来的某个时候 我希望能够通过在
  • 在java中生成唯一ID的最佳方法

    在java中生成唯一ID的最佳方法是什么 人们一般使用 String id System currentTimeMillis someStaticCounter 但这种方法需要在多线程应用程序中进行同步 我在用 try Thread sle
  • 在html表中动态显示哈希数组?

    我有一个名为 products 的数据库 其中有一个使用 hstore 的字段 称为data 目前 在我的 index html haml 中 我只是循环浏览产品并显示它们data作为哈希 products each do product
  • 使用 openpyxl 可以实现更精确的图像放置吗? (像素坐标而不是单元坐标?)

    我正在尝试复制和自动化工作中常用的实践 我正在尝试在 openpyxl 的单元格中放置多个图像和文本 但是我只能将图像锚定到单元格的左上角 并且还没有找到比这更准确定位的方法 所以它们最终会与彼此和文本重叠 from openpyxl im