ZBLOG

上述代码没有移动wb.save(name_str)

非常抱歉,我之前的回答有误。确实没有将 wb.save(name_str) 移动到正确的位置。

根据您提供的错误信息,可能是由于在保存工作簿后再次尝试操作图像文件引起的。请将 wb.save(name_str) 移动到图像对象添加之前的位置。以下是修改后的代码示例:

  1. from openpyxl import load_workbook
  2. from openpyxl.drawing.image import Image as XLImage
  3. from PIL import Image
  4. # 打开现有的Excel工作簿
  5. wb = load_workbook(name_str)
  6. ws = wb[site_name] # 替换为实际的工作表名称
  7. temp_image_path = str(sys.argv[1]) + str(date_time) + ".png"
  8. # 将Base64编码字符串转换为Image对象
  9. image = decode_base64_to_image(sign_image, temp_image_path)
  10. # 调整图像尺寸以适应单元格大小(可选)
  11. img_width, img_height = image.size
  12. cell_width = ws.column_dimensions['G'].width - 2 # 减去边框宽度,根据实际情况调整值
  13. cell_height = (cell_width / img_width) * img_height
  14. resized_image = image.resize((int(cell_width), int(cell_height)))
  15. # 创建Excel工作簿中的图像对象,并插入到指定位置
  16. with BytesIO() as img_bytes:
  17. resized_image.save(img_bytes, format='PNG')
  18. xl_img = XLImage(img_bytes)
  19. xl_img.width = cell_width - 2 # 减去边框宽度,根据实际情况调整值
  20. xl_img.height = cell_height - 2 # 减去边框宽度,根据实际情况调整值
  21. ws.add_image(xl_img, 'G29')
  22. # 保存Excel文件
  23. wb.save(name_str)
  24. # 关闭图像文件对象
  25. image.close()

这样修改后的代码会先保存工作簿,然后再关闭图像文件对象。这样就可以避免引发 I/O 错误。请确保将 wb.save(name_str) 移到添加图像之前的位置,并在保存完工作簿后再关闭图像文件对象。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=18095

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?