|
发表于 2023-5-24 13:53:19
|
显示全部楼层
你在使用 SaveAs 方法时,没有正确设置其参数以移除密码。
对于 Excel VBA, SaveAs 方法的参数如下:
- expression.SaveAs (FileName, FileFormat, Password, WriteResPassword, ReadOnlyRecommended, CreateBackup, AccessMode, ConflictResolution, AddToMru, TextCodepage, TextVisualLayout, Local)
复制代码
你的代码中这样写:
- workbook.SaveAs(new_file_path, None, '', '')
复制代码
这意味着你在设置 FileFormat 参数为 None ,然后设置 Password 和 WriteResPassword 为空字符串。但这并不能真正地移除密码。在 Python 中, None 和空字符串都表示无,但在 VBA 中,它们可能不一样。
你应该这样来移除密码:
- workbook.SaveAs(Filename=new_file_path, Password='')
复制代码
在这里,我们只设置了 Filename 和 Password 两个参数,其他的参数都会使用它们的默认值。
所以,你的代码应改为:
- import os
- import win32com.client as win32
- # 定义密码
- password = '00'
- # 定义要处理的文件夹路径
- folder_path = r'C:\Users\EDY\Desktop\文件'
- # 启动 Excel 应用程序
- excel = win32.gencache.EnsureDispatch('Excel.Application')
- excel.Visible = False # 隐藏 Excel 窗口
- # 遍历文件夹中的所有 Excel 文件
- for file_name in os.listdir(folder_path):
- file_path = os.path.join(folder_path, file_name)
- if not os.path.isfile(file_path): # 如果不是文件,则跳过
- continue
- if not file_name.endswith('.xlsx') and not file_name.endswith('.xls'): # 如果不是 Excel 文件,则跳过
- continue
-
- # 打开 Excel 文件
- workbook = excel.Workbooks.Open(file_path, False, False, None, Password=password)
-
- # 另存为没有密码的文件
- new_file_path = file_path.replace('.xlsx', '_no_password.xlsx').replace('.xls', '_no_password.xls')
- workbook.SaveAs(Filename=new_file_path, Password='')
-
- # 关闭 Excel 文件
- workbook.Close(False)
-
- # 退出 Excel 应用程序
- excel.Quit()
复制代码
这段代码应该能够按你的预期工作,即移除 Excel 文件的密码并另存为新的无密码文件。 |
|