2013-07-04 41 views
3

我正在研究一個程序,該程序允許我從包含數百個Excel表單的文件中執行診斷並提取數據。我現在用的是DataNitro加入將Excel單元格值直接讀取到複雜Python Obects,DataNitro

我的程序分爲兩個階段:

PhaseI:診斷:該程序讀取每個表的某些用戶輸入列的每一個細胞,並返回字典和列表到Excel電子標籤。列表的一個例子是:開始/結束要提取的數據的行。這些對象有兩個目的:1)允許用戶識別在提取數據之前應該檢查的值; 2)描述每張表的數據結構。第二階段:數據提取程序使用第一階段創建的對象,從單個工作表中提取數據,並將其編譯到新工作表上。

該程序的工作非常好,我能夠非常快地提取數千個觀測數據(當你知道我的工作以前的任職者是通過手工完成的)。

因此,這裏的問題:

爲了第二階段發生的,它使用在第一階段中建立的對象。這意味着,一旦診斷階段結束,並且已經被用戶迭代了足夠多次,直到他對數據準備好被提取爲止感到高興,則整個程序必須從頭開始重新運行。這絕對是一種低效率,特別是因爲診斷階段可能需要幾分鐘的時間。所以我想知道的是,是否有一些方法可以將單元格值中包含的列表讀回python作爲它們打算使用的對象類型?如果有的話,我可以使用階段I中的對象,因爲它們出現在Excel表格中,並直接將它們帶到階段II,而無需重新運行階段I程序。

例如:其中一個詞典有一個代表紙張編號的關鍵詞,以及一個條目,它本身就是一個帶有觀察值鍵的詞典列表,一個條目是一個列表,可以在其上找到觀察行...

{'Sheet1':[{'OBSERVATION4':[12,13,14]},{'OBSERVATION12':[29,31,35]}],'Sheet12':[{'OBSERVATION7 ':['6,7,9]},{'OBSERVATION18':[40,44,48]}]}

在excel單元格中,它只是顯示爲一個字符串。

我怎樣才能讀取這種類型的複雜對象直接回到python?

感謝

回答

3

您可以將字符串傳遞到eval功能,將評估這是Python代碼。例如,如果你有一個名爲「數據表」片材的單元格A1該字符串,可以做

my_dict = eval(Cell("Data Sheet", "A1").value) 

加載字典回my_dict

一般來說,使用eval函數時應該小心,因爲評估任意用戶輸入是一個安全漏洞。 (例如,你不想在網站上做這件事。)但是,在這種情況下,用戶可以編寫和運行他們自己的代碼,所以這不是問題。

+0

太棒了!謝謝.... –

相關問題