冰菲 发表于 2023-5-23 15:29:10

求python代码,已知Excel密码,批量打开带密码工作簿并另存替换原文件

def xls_save_as_xlsx(data_path):
    for dirpath,dirname,filenames in os.walk(data_path):   #os.walk()遍历文件
      for fname in filenames:
            file_name=os.path.join(dirpath,fname)    #os.path.join()合并路径
            folder,name=os.path.splitext(file_name)    #分解扩展名
            if file_name.endswith('.xls'):
                df=pd.read_excel(file_name)    #pandas读xls文件
                df.to_excel(f"{folder}.xlsx",index=False)   #pandas写入xlsx
                print(f'{file_name} 转换成功啦!O(∩_∩)O哈哈~')
                os.remove(file_name)   #删除原xls文件(如果需要两种格式同时存在删除此代码
#print('更改格式完成')
data_path=r"C:\Users\EDY\Desktop\文件"   #文件路径
xls_save_as_xlsx(data_path)      #调用一下,转换完成
#print('------0、xls已更改为xlsx格式')


以上是我自己写的没有密码工作簿,批量打开多个工作簿并改为xlsx格式,保存替换原文件,有密码的代码怎么写?,如果我代码复杂、看不懂等可以按照你的逻辑重新写代码

isdkz 发表于 2023-5-23 15:33:35

如果你想用python处理密码保护的Excel文件,你可以使用 openpyxl 库,该库可以处理 .xlsx 文件。由于pandas不直接支持读取密码保护的Excel文件,因此我们需要稍作修改。这是一个示例代码:

import os
from openpyxl import load_workbook

def unlock_excel_files(data_path, password):
    for dirpath, dirname, filenames in os.walk(data_path):
      for filename in filenames:
            file_path = os.path.join(dirpath, filename)
            if file_path.endswith('.xlsx'):
                wb = load_workbook(filename=file_path, read_only=False, keep_vba=True, data_only=True, keep_links=False, password=password)
                wb.save(file_path)
                print(f'文件 {file_path} 已成功解锁并保存。')

data_path = r"C:\Users\EDY\Desktop\文件"# 文件路径
password = "你的密码"# Excel文件的密码
unlock_excel_files(data_path, password)


在这个例子中,我们使用 os.walk 函数遍历指定目录中的所有文件,并使用 endswith('.xlsx') 方法过滤出.xlsx文件。然后,我们使用 openpyxl.load_workbook 函数打开每个Excel文件,并提供密码参数以解锁密码保护的工作簿。最后,我们使用 workbook.save 方法将修改保存到原始文件中。

注意: openpyxl 不支持旧的 .xls 文件格式,因此这个脚本只能用于 .xlsx 文件。如果你有 .xls 文件,你需要先将它们转换为 .xlsx 格式。你可以使用如 xlrd 和 xlwt 等库进行转换,但是这些库不支持密码保护的Excel文件,所以这需要在没有密码保护的情况下进行。

冰菲 发表于 2023-5-23 16:14:57

isdkz 发表于 2023-5-23 15:33
如果你想用python处理密码保护的Excel文件,你可以使用 openpyxl 库,该库可以处理 .xlsx 文件。由于pandas ...

PS C:\Users\EDY\Desktop\python> & C:/Users/EDY/AppData/Local/Programs/Python/Python311/python.exe "c:/Users/EDY/Desktop/python/解密工作簿 copy.py"
PS C:\Users\EDY\Desktop\python> & C:/Users/EDY/AppData/Local/Programs/Python/Python311/python.exe "c:/Users/EDY/Desktop/python/解密工作簿 copy.py"
Traceback (most recent call last):
File "c:\Users\EDY\Desktop\python\解密工作簿 copy.py", line 15, in <module>
    unlock_excel_files(data_path, password)
File "c:\Users\EDY\Desktop\python\解密工作簿 copy.py", line 9, in unlock_excel_files
    wb = load_workbook(filename=file_path, read_only=False, keep_vba=True, data_only=True, keep_links=False, password=password)
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: load_workbook() got an unexpected keyword argument 'password'
PS C:\Users\EDY\Desktop\python>



工作簿打开另存为xlsx格式了,添加完密码,运行报错了,以上为报错内容
页: [1]
查看完整版本: 求python代码,已知Excel密码,批量打开带密码工作簿并另存替换原文件