帮忙看一下,打开多个带密码的Excel工作簿,另存为没有密码,但是另存的还是有密码.
import osimport 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(new_file_path, None, '', '')
# 关闭 Excel 文件
workbook.Close(False)
# 退出 Excel 应用程序
excel.Quit()
此代码运行正常,带密码的多个工作簿另存后工作簿还是有密码,懂得帮忙看一下,为什么?
你在使用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 文件的密码并另存为新的无密码文件。 isdkz 发表于 2023-5-24 13:53
你在使用SaveAs方法时,没有正确设置其参数以移除密码。
对于 Excel VBA, SaveAs方法的参数如下 ...
不行,另存还是有密码 isdkz 发表于 2023-5-24 13:53
你在使用SaveAs方法时,没有正确设置其参数以移除密码。
对于 Excel VBA, SaveAs方法的参数如下 ...
workbook.SaveAs(Filename=new_file_path, Password='')
我刚试了一下给Password='3',换了密码,换密码是可以的,就是删除不了密码 冰菲 发表于 2023-5-24 14:24
workbook.SaveAs(Filename=new_file_path, Password='')
我刚试了一下给Password='3',换了密码,换 ...
我明白你的问题了,你的代码试图通过设置密码为空来移除密码,但是看起来在 Excel 中这个方法并不起作用。实际上,密码需要明确地设置为None来移除。
让我们尝试使用以下的代码来移除密码:
workbook.Password = ''
workbook.SaveAs(Filename=new_file_path)
这个代码首先将 workbook 对象的密码属性设置为空,然后再使用 SaveAs 方法保存。这样应该能够成功地移除密码。
所以,你的完整代码应该修改为:
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)
# 移除密码并另存为新文件
workbook.Password = ''
new_file_path = file_path.replace('.xlsx', '_no_password.xlsx').replace('.xls', '_no_password.xls')
workbook.SaveAs(Filename=new_file_path)
# 关闭 Excel 文件
workbook.Close(False)
# 退出 Excel 应用程序
excel.Quit()
请尝试这段代码,看看是否能满足你的需求。 isdkz 发表于 2023-5-24 14:29
我明白你的问题了,你的代码试图通过设置密码为空来移除密码,但是看起来在 Excel 中这个方法并不起作用 ...
成功了 {:5_110:}
页:
[1]