Как открыть несколько защищенных книг, используя xlrd, glob и pandas? - PullRequest
0 голосов
/ 22 ноября 2018

Итак, я пытаюсь открыть несколько книг Excel и внести в них изменения, но они защищены, и я не знаю, как реализовать xlrd, чтобы он работал.Все работает с незащищенными книгами, но когда я добавляю к ним пароль, я получаю сообщение об ошибке XLRDError: Can't find workbook in OLE2 compound document, связанное с частью data = pd.read_excel(f,header=2).

Вот мой код:

import os
import win32com.client
import glob
import pandas as pd
from xlrd import *

path = r'C:\...'
files = os.listdir(path)

dfs = []
for f in glob.glob(path + "/*.xlsx"):
    **xlApp = win32com.client.Dispatch("Excel.Application")
    xlwb = xlApp.Workbooks.Open(f, False, True, None, 'fernanda')**
    data = pd.read_excel(f,header=2)
    dfs.append(data)

"""Columns we're going to to manipulate"""

date = "DATE OF CHANGE"
id = "ID"

df = pd.concat(dfs)
df[date] = pd.to_datetime(df[date], errors='coerce')
master = df.groupby(id).min()

for i in dfs:
    i[date] = i.join(master,rsuffix='_adj',on=id)[[date+"_adj"]]

r = zip(dfs,glob.glob(path + "/*.xlsx"))
r_list = list(r)

for i in r_list:
    writer = pd.ExcelWriter(i[1])
    i[0].to_excel(writer,'sheet1', startrow=2)
    writer.save()

Может кто-нибудь помочь?Спасибо

1 Ответ

0 голосов
/ 23 ноября 2018

Вы можете попробовать это, просто измените его для вашего цикла

xl = Dispatch("Excel.Application")
#open password protected workbook, link on this command at the bottom
wb = xl.Workbooks.Open(filename, None, None, None, "your password")
ws = wb.Worksheets("Sheet1")
data = ws.Range("A1:D4")
#now data.value will return a tuple of tuples that you can put in a dataframe
values = data.value
#assuming the first row is the header
df = pd.DataFrame(values[1:],columns=values[0])

https://docs.microsoft.com/en-us/office/vba/api/Excel.Workbooks.Open

...