在 Python 中循环访问受密码保护的 XLSB 和 XLSM 文件时出错

Error Looping Through Password Protected XLSB and XLSM Files in Python

以下脚本适用于 .xlsm 和 .xlsb 文件,直到我尝试计算 Excel 受密码保护的文件。这是我正在尝试改进和分析的现有流程 - 我将收到的工作表都受密码保护,作为文件名的前 5 个字符,并且都是 .xlsb 或 .xlsm。

#Take xlsb Binary files, convert to csv, concatenate, keep file name
import pandas as pd
import os, glob, win32com.client


path = r'C:\Users\user\Desktop\Test Binary'
all_files_test = glob.glob(os.path.join(path, "*.xlsb"))

for file in all_files_test:
    name1 = os.path.splitext(os.path.split(file)[1])[0]
    name2 = name1[0:5]
    excel = win32com.client.Dispatch("Excel.Application")
    excel.Visible = False
    doc = excel.Workbooks.Open(file,False, False, None, name2)
    doc.Sheets(3).Select #3 for xlsm files - verify
    csv_name = os.path.basename(file).replace('xlsb','csv') #xlsb xlsm
    doc.SaveAs(Filename=os.path.join(path, 'CSV Out', csv_name),FileFormat = 6)
    doc.Close(True)
    excel.Quit()
excel.Quit()

files = glob.glob('c:/Users/user/Desktop/Test Binary/CSV Out/*.csv')

dfs = [pd.read_csv(fp).assign(orig_file_name=os.path.basename(fp)) for fp in files]
df = pd.concat(dfs, ignore_index=True)

df.head(10)
df.to_csv('c:/Users/user/Desktop/Test Binary/CSV Out/concat.csv',sep=',')
print("Done, check concatenated file.")

该脚本通过第一个文件运行,但当它到达第二个文件时出现错误:

Traceback (most recent call last):
  File "C:\Users\user\Desktop\xlsb_csv_concat.py", line 28, in <module>
    doc.Sheets(3).Select #3 for xlsm files - verify
AttributeError: 'NoneType' object has no attribute 'Sheets'

我确信有更有效的方法来完成我所写的内容,但它对于这项特定任务来说效果很好,直到出现密码。预先感谢您的帮助。

以防万一有人遇到类似情况:

变化中:

doc = excel.Workbooks.Open(file, False, False, None, name2)

doc = excel.Workbooks.Open(file, False, True, None, name2)

对我有用。