2016-04-25 3 views
1

Я использую Windows 7, Python 2.7 и Microsoft Excel 2013.С защищенным паролем Excel файл в объект Python

Я знаю из here, что я могу открыть и получить доступ, защищенный паролем 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 

Я хотел бы сохранить лист Excel из файла, защищенного паролем, в качестве объекта Python. В идеале это было бы сохранено как pandas dataframe, но я был бы в порядке, чтобы иметь его как словарь или любой другой тип объекта.

У меня есть пароль. Это возможно?

Спасибо!

+1

Как насчет записи на временный файл (без пароля), а затем читать его с пандами? Вам даже не нужно, чтобы это был физический файл, python может предоставить вам объект буферного файла без фактической записи на диск (см. StringIO) – Shovalt

ответ

3

Добавьте следующие строки в ваш существующем код (где xlwb уже существует):

import os 
import pandas as pd 
from tempfile import NamedTemporaryFile 

# Create an accessible temporary file, and then delete it. We only need a valid path. 
f = NamedTemporaryFile(delete=False, suffix='.csv') 
f.close() 
os.unlink(f.name) # Not deleting will result in a "File already exists" warning 

xlCSVWindows = 0x17 # CSV file format, from enum XlFileFormat 
xlwb.SaveAs(Filename=f.name, FileFormat=xlCSVWindows) # Save the workbook as CSV 
df = pd.read_csv(f.name) # Read that CSV from Pandas 
print df 

Имейте в виде, что для меня ваш код полностью не работает, и я получил ответ на запрос пароля. Но, предполагая, что вам удастся прочитать файл с защитой паролем, приведенный выше код работает.

Excel SaveAs ссылка: https://msdn.microsoft.com/en-us/library/bb214129(v=office.12).aspx

+0

Я пробовал ваш код, но он строка: xlwb.SaveAs (имя файла = f.name , FileFormat = xlCSVWindows) ошибка: '-2147417848,' Вызванный объект отключен от своих клиентов. ' – Sylvain

+0

@Sylvain Вы инициализировали 'xlwb', как описано в вопросе? Попробуйте напечатать имя и первую ячейку, как в вопросе. Кроме того, вы убедились, что используете 'delete = False'? Я просто бросаю догадки, но давайте посмотрим, где мы стоим на этих. – Shovalt

+0

@Shovalt Привет! Что делать, если я хочу сделать это с помощью xlsx-файла. Что изменится тогда? – DimKoim