【发布时间】:2019-04-25 09:45:29
【问题描述】:
所以我试图打开多个 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()
有人可以帮忙吗?谢谢
【问题讨论】:
-
这似乎是一个未解决的问题。我发现这个解决方法需要另一个名为
xlwings的库和一个已安装的“Excel”(可能只有 Windows):davidhamann.de/2018/02/21/… -
是的,我实际上是先尝试过的,但我得到了同样的错误:/
-
如果你可以在 VBA 中编码,我建议只使用 pywin32 加 VBA 然后使用 pandas
-
我现在正在尝试,但是如何将 win32com 工作簿转换为 pandas 数据框?