从受密码保护的Excel文件到pandas DataFram

2024-10-02 12:27:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我可以使用以下命令打开受密码保护的Excel文件:

import sys
import win32com.client
xlApp = win32com.client.Dispatch("Excel.Application")
print "Excel library version:", xlApp.Version
filename, password = sys.argv[1:3]
xlwb = xlApp.Workbooks.Open(filename, Password=password)
# xlwb = xlApp.Workbooks.Open(filename)
xlws = xlwb.Sheets(1) # counts from 1, not from 0
print xlws.Name
print xlws.Cells(1, 1) # that's A1

我不知道如何将信息传输到pandas数据帧。我需要一个接一个地全部读取单元格,还是有一种方便的方法来实现这一点?


Tags: fromimport命令clientsyspasswordopenfilename
3条回答

从大卫哈曼的网站(所有学分归他) https://davidhamann.de/2018/02/21/read-password-protected-excel-files-into-pandas-dataframe/

使用xlwings,打开文件将首先启动Excel应用程序,以便您可以输入密码。

import pandas as pd
import xlwings as xw

PATH = '/Users/me/Desktop/xlwings_sample.xlsx'
wb = xw.Book(PATH)
sheet = wb.sheets['sample']

df = sheet['A1:C4'].options(pd.DataFrame, index=False, header=True).value
df

假设您可以使用win32com API将加密文件保存回磁盘(我意识到这可能达不到目的),那么您可以立即调用顶级pandas函数read_excel。不过,您需要首先安装xlrd(对于Excel 2003)、xlwt(对于2003)和openpyxl(对于Excel 2007)的组合。Here是用于读取Excel文件的文档。目前,pandas不支持使用win32com API读取Excel文件。如果你愿意的话,欢迎你来open up a GitHub issue

假设起始单元格被指定为(StartRow,StartCol)而结束单元格被指定为(EndRow,EndCol),我发现以下操作对我有效:

# Get the content in the rectangular selection region
# content is a tuple of tuples
content = xlws.Range(xlws.Cells(StartRow, StartCol), xlws.Cells(EndRow, EndCol)).Value 

# Transfer content to pandas dataframe
dataframe = pandas.DataFrame(list(content))

注意:Excel单元格B5在win32com中作为第5行第2列给出。另外,我们需要list(…)将元组的元组转换为元组的列表,因为元组的元组没有pandas.DataFrame构造函数。

相关问题 更多 >

    热门问题