在Python中打开现有的Excel文件,保留样式,编辑并插入图像。

6

我有一个“Excel模板”,它可以:

  1. 打开现有文件
  2. 编辑单元格值而不修改样式(字体、单元格宽度和高度、单元格合并等)
  3. 添加或插入图像(jpg或png)以保存到新文件中。

目前我已经尝试了4个选项。

  1. XLWT / XLRD - 这个工具似乎是最有效的,可以很好地打开xlsx文件并保留所有样式,很容易编辑单元格(需要一些技巧来保持样式),但是它只能插入位图(bmp)图像。插入图像后会被拉伸,不能保持比例和大小。我想知道是否有解决办法。
  2. XLSXWritter - 它非常实用且易于使用,可以创建新文件。但无法打开现有文件,所以这不是一个选择。
  3. openpyxl - 它似乎可以使用PIL(jpg、png、gif等)插入图像,但当我打开现有的“模板”时,所有的样式都消失了,所以它不是一个选择。
  4. pythonexcels - 它似乎可以与Microsoft Office Excel和win32com一起使用,因此可能不是跨平台的选项,而且我找不到插入图像的方法。

我认为我也可以使用一些PDF创建工具,但我需要保持页面大小,因为我需要将创建的文件发送到打印机,但不是信纸或A4大小,我需要在不同大小的粘贴标签上打印。

问题:是否有其他解决方案替代xlwt?


这是在VBA中的实现方式。你的Python库中是否有类似的属性可用?如果XLSXWriter具备此功能,为什么不同时使用两个库——一个用于读取,一个用于写入——使用一些脚本来重命名旧文件或删除它,并写回新版本。 - JGFMK
1个回答

0
我们最近遇到了一个类似的问题,即保持格式不变的目标,并且我们的解决方案基于openpyxl。因此我知道openpyxl现在支持格式设置。
以下是我的简单示例,可以解决所提出的问题:
# working dir
|- test.xlsx
|- test42.png
|- test.py

test.xlsx:

enter image description here

test.py:

import openpyxl

path = "test.xlsx"
wb_obj = openpyxl.load_workbook(path)
sheet_obj = wb_obj.active
cell_obj = sheet_obj.cell(row=2, column=1)
cell_obj.value = "Earth"

img = openpyxl.drawing.image.Image('test42.png')
img.anchor = 'B2'
sheet_obj.add_image(img)

wb_obj.save("test_new.xlsx")

test_new.xlsx:

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接