Python:修改 XLSM-sheet 而不会丢失其他 sheet 上的 VBA 脚本或形状

Python: Modifying XLSM-sheet without loosing VBA scripts or shapes on other sheets

我想修改现有的 XLSM 文件,但是:


更多信息:


我设法通过使用参数 "keep_vba" 将 vba 脚本保留在 XLSM 文件中,但它仍然会删除工作簿中的所有形状。 而且由于形状用作按钮,我无法删除它们。

我的代码目前如下所示。

 from openpyxl import load_workbook

 workbook = load_workbook(filename=insert_file, read_only=False, keep_vba=True)
 import_sheet = workbook["sheet_1"]
 row_array = ["1", "2", "3", "4"]

 # get first empty row based on the key-column (=A)
 empty_row_index = None
 for i in range(1, 500, 1):  
    if import_sheet['A'+str(i)].value is None:
        empty_row_index = i
    break

 for i, val in enumerate(row_array):   # insert row
     import_sheet.cell(row=empty_row_index, column=i+1).value = val

 workbook.save(insert_file)

欢迎任何帮助/建议。

事实证明 xlwings 可以做我想做的事——它没有在他们的文档中指定,但它仍然有效。以下代码片段打开一个 xlsm 文件,将数据插入单元格并覆盖工作簿,同时保留宏和形状/"buttons".

pip install xlwings

import xlwings as xw

wb = xw.Book(r'C:\path\to\file\file.xlsm')
sht = wb.sheets['sheet_1']
sht.range('A5').value = 'Foo 1'
wb.save(r'C:\path\to\file\file.xlsm')  # full path overwrites file without prompt

# optional to close the appearing excel window
app = xw.apps.active  
app.quit()