返回

如何在 Ubuntu 中使用 Python 写入包含宏的 .xlsm 文件(保留宏)

Linux

Python 中保留宏并在 Ubuntu 中写入 .xlsm 文件

问题

在 Ubuntu 中使用 Python 将数据写入包含宏的 .xlsm 文件时,宏可能会丢失。这可能是由于所使用的库(例如 openpyxl)无法保留宏所致。

解决方案

为了解决这个问题,我们可以结合使用 xlrdopenpyxl 库。xlrd 可以读取和写入宏,而 openpyxl 可以编辑单元格数据。

步骤

1. 读取宏

workbook_old = xlrd.open_workbook('data.xlsm')
macros = workbook_old.macros()

2. 替换单元格数据

workbook_new = openpyxl.Workbook()
wb = load_workbook(filename='data.xlsm', read_only=False)
sheet = wb['Sheet1']

3. 保存宏

for macro in macros:
    macro_code = workbook_old.get_sheet_by_name(macro).cell(1, 1).value
    workbook_new.add_vba_project(workbook_old.vba_project)
    workbook_new.vba_project.vbaprojects[0].vbaproject.CodeModules.Add(macro, macro_code)

4. 保存文件

workbook_new.save('data.xlsm')

优化写入效率

为了提高写入效率,可以尝试以下方法:

  • 使用 Pandas 的 to_excel() 方法: 此方法允许一次性将 DataFrame 写入 Excel 文件,比循环遍历单元格更快。
  • 关闭自动计算: 在写入数据之前关闭自动计算可以显著提高写入速度。
  • 分批写入: 将大量数据分成较小的批次写入可以避免内存溢出问题。

结论

通过结合使用 xlrdopenpyxl 库,我们可以在 Ubuntu 中将数据写入 .xlsm 文件,同时保留宏。通过优化写入效率,我们可以提高程序的性能。

常见问题解答

1. 为什么宏在使用 openpyxl 时会丢失?
openpyxl 无法保留宏,因为它主要用于编辑单元格数据。

2. 是否可以在 Windows 中使用此方法?
是的,此方法也适用于 Windows 系统。

3. 如何关闭自动计算?
在 Pandas 中,可以使用 pd.set_option('mode.chained_assignment', None) 来关闭自动计算。

4. 如何分批写入数据?
可以将大量数据分成较小的批次,然后使用循环逐批写入。

5. 我可以结合使用其他库吗?
当然,只要它们提供了所需的功能,可以结合使用其他库。