python代码把文件夹及其子文件夹里所有xlsm格式文件另存为xlsx格式文件,并且打开xlsm格式文件之前先禁用宏,保存xlsx文件的时候不保存vb项目,有同名文件的话覆盖,并删除原文件
时间: 2024-12-21 21:24:34 浏览: 9
你可以使用Python的`os`, `glob`, `zipfile`, `openpyxl`, 和 `pandas` 库来实现这个功能。这里是一个简单的示例,它会遍历指定目录及其子目录,找到所有的`.xlsm` 文件,然后对它们执行所需操作:
```python
import os
import glob
import zipfile
from openpyxl import load_workbook
# 指定要处理的目录
dir_path = 'your_directory'
def convert_xlsm_to_xlsx(xlsm_file_path):
# 禁用宏并加载工作簿
with zipfile.ZipFile(xlsm_file_path, mode='r') as zip_ref:
zip_ref.extractall('.') # 解压到当前目录
wb = load_workbook(xlsm_file_path)
# 禁用宏
for sheet in wb.sheetnames:
ws = wb[sheet]
if hasattr(ws, 'macro_sheet'): # 如果存在宏表
ws.macro_sheet._archive.disable_all_macros()
# 另存为xlsx,忽略vb项目
output_filename = os.path.splitext(os.path.basename(xlsm_file_path))[0] + '.xlsx'
new_wb = wb.remove_vba_project() # 删除vb项目
new_wb.save(output_filename)
# 清理临时文件
os.remove(xlsm_file_path) # 删除原始.xlsm文件
os.remove(os.path.join('.', wb.filename)) # 删除解压后的临时文件
# 遍历目录树,查找xlsm文件
for root, dirs, files in os.walk(dir_path):
for file in glob.glob(os.path.join(root, '*.xlsm')):
convert_xlsm_to_xlsx(file)
阅读全文