|
发表于 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 文件的密码并另存为新的无密码文件。 |
|