返回
如何在 Ubuntu 中使用 Python 写入包含宏的 .xlsm 文件(保留宏)
Linux
2024-03-26 15:04:36
Python 中保留宏并在 Ubuntu 中写入 .xlsm 文件
问题
在 Ubuntu 中使用 Python 将数据写入包含宏的 .xlsm
文件时,宏可能会丢失。这可能是由于所使用的库(例如 openpyxl
)无法保留宏所致。
解决方案
为了解决这个问题,我们可以结合使用 xlrd
和 openpyxl
库。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 文件,比循环遍历单元格更快。 - 关闭自动计算: 在写入数据之前关闭自动计算可以显著提高写入速度。
- 分批写入: 将大量数据分成较小的批次写入可以避免内存溢出问题。
结论
通过结合使用 xlrd
和 openpyxl
库,我们可以在 Ubuntu 中将数据写入 .xlsm 文件,同时保留宏。通过优化写入效率,我们可以提高程序的性能。
常见问题解答
1. 为什么宏在使用 openpyxl
时会丢失?
openpyxl
无法保留宏,因为它主要用于编辑单元格数据。
2. 是否可以在 Windows 中使用此方法?
是的,此方法也适用于 Windows 系统。
3. 如何关闭自动计算?
在 Pandas 中,可以使用 pd.set_option('mode.chained_assignment', None)
来关闭自动计算。
4. 如何分批写入数据?
可以将大量数据分成较小的批次,然后使用循环逐批写入。
5. 我可以结合使用其他库吗?
当然,只要它们提供了所需的功能,可以结合使用其他库。