Из защищенного паролем файла Excel в Pandas DataFrame

Я могу открыть защищенный паролем файл 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. Нужно ли читать ячейки одну за другой и все, или есть удобный метод для этого?

3 ответов


предполагая, что начальная ячейка задана как (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 задается как строка 5, col 2 в win32com. Кроме того, нам нужен список(...) конвертировать из кортежа кортежей в список кортежей, так как панд нет.Конструктор DataFrame для кортежа кортежей.


предполагая, что вы можете сохранить зашифрованный файл обратно на диск с помощью API win32com (который, как я понимаю, может победить цель), вы можете сразу вызвать функцию pandas верхнего уровня read_excel. Вам нужно будет установить некоторую комбинацию xlrd (для Excel 2003), xlwt (также для 2003), и openpyxl (для Excel 2007) сначала. здесь документация для чтения в файлах Excel. В настоящее время pandas не поддерживает использование API win32com для чтения Excel-файлы. Добро пожаловать в откройте выпуск GitHub если хотите.


с сайта Дэвида Хаманна (все кредиты идут ему) 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