简体   繁体   English

使用 Openpyxl 保存启用宏的 Excel 工作簿 (.xlsm) 时出现问题。 Excel 引发错误并开始修复工作簿

[英]Problem saving Macro Enabled Excel Workbook (.xlsm) using Openpyxl. Excel throws an error and starts Repairing the workbook

I need to update a macro enabled excel workbook on a regular basis.我需要定期更新启用宏的 Excel 工作簿。 Openpyxl is able to read, update and save file successfully without an error. Openpyxl 能够成功读取、更新和保存文件而不会出错。

However, when trying to open the newly saved file in Excel, it throws error 'We found a problem with some content in XX.xlsm.但是,当尝试在 Excel 中打开新保存的文件时,会抛出错误“我们发现 XX.xlsm 中的某些内容存在问题。 Do you want us to try to recover as much as we can?你想让我们尽可能多地恢复吗? .... Click Yes.' .... 单击是。

After clicking on Yes, it starts repairing the file and removes some key parts mainly /xl/drawings folder;点击是后,开始修复文件并删除一些关键部分,主要是/xl/drawings文件夹;

Removed Part: /xl/drawings/vmlDrawing10.vml part.删除部分:/xl/drawings/vmlDrawing10.vml 部分。 (Drawing shape) Removed Feature: Named range from /xl/workbook.xml part (Workbook) Removed Records: Comments from /xl/comments/comment5.xml part (Comments) Repaired Records: Drawing from /xl/drawings/drawing1.xml part (Drawing shape) Repaired Records: Drawing from /xl/drawings/drawing2.xml part (Drawing shape) Repaired Records: Drawing from /xl/drawings/drawing3.xml part (Drawing shape) Repaired Records: Drawing from /xl/drawings/drawing4.xml part (Drawing shape) Repaired Records: Drawing from /xl/drawings/drawing5.xml part (Drawing shape) Repaired Records: Drawing from /xl/drawings/drawing6.xml part (Drawing shape) Repaired Records: Drawing from /xl/drawings/drawing7.xml part (Drawing shape) Repaired Records: Drawing from /xl/drawings/drawing8.xml part (Drawing shape) Repaired Records: Drawing from /xl/drawings/drawing9.xml part (Drawing shape) Repaired Records: Drawing from /xl/drawings/drawing10.xml part (Drawing shape) Repaired Records: Drawing from /xl/Repaired Records: DRepaired (绘图形状)已删除功能:命名范围来自 /xl/workbook.xml 部分(工作簿)已删除记录:来自 /xl/comments/comment5.xml 部分的评论(评论)已修复记录:来自 /xl/drawings/drawing1.xml 的绘图部分(绘图形状)已修复记录:从 /xl/drawings/drawing2.xml 绘图 部分(绘图形状)已修复记录:从 /xl/drawings/drawing3.xml 绘图部分(绘图形状)已修复记录:从 /xl/drawings 绘图/drawing4.xml 部分(绘图形状)已修复记录:从 /xl/drawings/drawing5.xml 部分绘图(绘图形状)已修复记录:从 /xl/drawings/drawing6.xml 部分绘图(绘图形状)已修复记录:从绘图/xl/drawings/drawing7.xml 部分(绘图形状)已修复记录:从 /xl/drawings/drawing8.xml 部分绘图(绘图形状)已修复记录:从 /xl/drawings/drawing9.xml 部分绘图(绘图形状)已修复记录:从 /xl/drawings/drawing10.xml 部分绘制(绘图形状)已修复记录:从 /xl/Repaired 绘制记录:DRepaired Records: DRepaired Records: DRepaired Records: DRepaired Records: DRepaired Records: DRepaired Records: D记录:DRepaired 记录:DRepaired 记录:DRepaired 记录:DRepaired 记录:DRepaired 记录:D

As a result except for the data that the python script updated, the rest of the data gets corrupted and I get #NAME?结果,除了 python 脚本更新的数据之外,其余数据都被破坏了,我得到了#NAME? and #VALUE!和#VALUE! error everywhere in the rest of the workbook.工作簿的其余部分到处都有错误。

Here's the snippet of the code:这是代码片段:

path = 'XXX.xlsm'

from openpyxl import load_workbook
wb = load_workbook(path,keep_vba=True)

ws = wb['Input']

XXX
XXX

ws['I6'].value = date.today()


wb.save('XXX.xlsm')            
wb.close()

I am not sure how to go about it.我不知道该怎么做。 Please help me fix this error or suggest an alternative as I really need this to work.请帮助我修复此错误或提出替代方案,因为我确实需要它才能工作。 Thank you!谢谢!

You can do a workaround by first saving and then loading again before finally saving.您可以通过首先保存然后在最终保存之前再次加载来解决问题。

from openpyxl import Workbook, load_workbook
wb = Workbook()
wb.save('your_macro_wb.xlsm')
wb = load_workbook('your_macro_wb.xlsm', keep_vba=True)
wb.save('your_macro_wb.xlsm')

I have a same issue when opening the excel file.打开excel文件时我遇到了同样的问题。 One of the drawing shapes was missing.缺少其中一个绘图形状。 After I update the openpyxl version to 3.0.10 (original 2.6), the problem is resolved.我把openpyxl版本更新到3.0.10(原2.6)后,问题解决了。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM