Из защищенного паролем файла 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