Python:修改 XLSM-sheet 而不会丢失其他 sheet 上的 VBA 脚本或形状
Python: Modifying XLSM-sheet without loosing VBA scripts or shapes on other sheets
我想修改现有的 XLSM 文件,但是:
- 我需要保留 VBA-Scripts
- 我需要保持形状(也就是我的 "buttons" 来触发脚本)
更多信息:
- 到目前为止我使用的是openpyxl(但对其他模块开放)
- 我只想修改 sheet_1 - 它只包含数据
- sheet_2 包含作为按钮的形状 后面有 VBA-macros
- sheet_3 到 sheet_n 包含更多数据,但没有任何 shapes/linked 脚本。
我设法通过使用参数 "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()
我想修改现有的 XLSM 文件,但是:
- 我需要保留 VBA-Scripts
- 我需要保持形状(也就是我的 "buttons" 来触发脚本)
更多信息:
- 到目前为止我使用的是openpyxl(但对其他模块开放)
- 我只想修改 sheet_1 - 它只包含数据
- sheet_2 包含作为按钮的形状 后面有 VBA-macros
- sheet_3 到 sheet_n 包含更多数据,但没有任何 shapes/linked 脚本。
我设法通过使用参数 "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()