如何使用openpyxl编辑带XML Map的Dynamics NAV模板且不丢失映射?
问题
我有一个来自Dynamics NAV的XLSX模板,可用于向系统导入数据。当我在模板中填写数据并尝试导入NAV时,收到错误提示:“Excel工作簿必须包含XML映射”。原模板带有XML Map,但使用openpyxl编辑数据并保存后,该映射丢失。相关代码如下:
import openpyxl wb = openpyxl.load_workbook("sheet.xlsx") sheet = wb.active sheet["A4"].value = 'Test' sheet["B4"].value = '1234' wb.save('test.xlsx') wb.close()
请问是否有方法在编辑XLSX文件数据并保存时保留XML Map?
解决方法
- 改用
xlwings库:openpyxl目前不支持保留XML映射(XML Maps),因为它未处理XLSX文件中关联的customXml和xmlMaps节点内容。xlwings通过调用Excel原生接口(Windows用COM,Mac用AppleScript)操作文件,能完整保留原模板的所有格式及XML映射。示例代码:
import xlwings as xw with xw.App(visible=False) as app: wb = xw.Book("sheet.xlsx") sheet = wb.sheets.active sheet.range("A4").value = 'Test' sheet.range("B4").value = '1234' wb.save('test.xlsx') wb.close()
- 手动迁移XML映射(不推荐):若必须使用openpyxl,可将原XLSX解压后,把
customXml文件夹和xl/workbook.xml里的<xmlMaps>节点内容复制到新保存的XLSX文件中(XLSX本质是ZIP压缩包)。该方法操作繁琐,容易因文件结构变动导致出错,仅适合临时场景。
内容的提问来源于stack exchange,提问作者atom7234
相关产品推荐
相关产品推荐

