使用 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 可以实现更精确的图像放置吗? (像素坐标而不是单元坐标?) 的相关文章

随机推荐

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

    我遇到了 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