2013-03-08 81 views
6

我可以打開一個密碼保護的Excel與此文件:從密碼保護的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 

我不知道,雖然如何將信息傳送到數據幀大熊貓。我是否需要逐一閱讀所有單元格,或者是否有一種方便的方法來實現?

+0

'xlws'是否有'Row'和'RowCount'(或任何它們被調用的) - 如果是,然後遍歷行數並構建列表列表...然後使用'pandas.DataFrame '對此......(對不起 - 不要使用windows - 所以不能自己試試這個) – 2013-03-16 13:05:37

回答

1

假設您可以使用win32com API(我認識到可能會失敗目的)將加密文件保存回磁盤,您可以立即調用頂層熊貓函數read_excel。您需要首先安裝xlrd(用於Excel 2003),xlwt(也用於2003)和openpyxl(用於Excel 2007)的組合。 Here是在Excel文件中閱讀的文檔。目前熊貓不提供使用win32com API讀取Excel文件的支持。如果您願意,歡迎來到open up a GitHub issue

+0

我再也不能測試了,因爲我目前不能在一個能讓我這樣做的環境中工作。如果您給出示例代碼並向我保證它可以正常工作,我會盡可能將其標記爲已接受。 :7) – dmvianna 2013-06-21 13:51:25

+0

我不知道如何使用win32com API,所以你不得不自己弄清楚,但是如果你看看我提供了一個鏈接的文檔,它會給出你想要的東西的指示。沒有必要在這裏複製示例代碼,因爲您可以在那裏閱讀它。 – 2013-06-21 18:27:15

2

假設起始細胞給出(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構造函數。