2013-01-03 159 views
0

所以我一直在使用Python 3.2和OpenPyXL的迭代工作簿as demonstrated here in the "Optimized Reader" example。當我嘗試用這個策略來讀,我已經從一個簡單的.zip壓縮包(通過手動和Python的zip文件包)提取一個或多個文件用OpenPyXL讀取提取的XLSX文件

我的問題出現。當我打電話.get_highest_column()我得到「A」和.get_highest_row()我得到1,當問及打印的每個單元格的值,如下所示:

wb = load_workbook(filename = file_name, use_iterators = True) 
ws = wb.worksheets[0] # Only need to read the first sheet, nothing fancy 
for row in ws.iter_rows(): 
    for entry in row: 
     print(entry.internal_value) 

它打印在A1,A2,A3,A4,A5,A6的值,和A7,無論文件實際大小如何。在文件本身中沒有任何理由,它將在Excel中完全打開。我非常難以理解它爲什麼這樣做,但我認爲解壓縮的XLSX在從Excel中保存之前格式不同,並且OpenPyXL無法正確解釋它。我甚至將'.xlsx'重命名爲'.zip',以便我可以瀏覽該文件並檢查差異,但除了從Excel保存的文件在「xl」中還有一個名爲「theme」的子文件夾「以前的版本不包含字體和格式數據的文件夾。

重要提示:當我打開它,它與在Excel中相同的文件名和然後運行重新保存這段代碼,它的工作原理完美 - 正確返回最大的行和列值,並正確打印每個細胞的價值。我試過在打開它之後立即通過OpenPyXL保存工作簿,但是這會產生相同的錯誤結果。

基本上,我需要找到一個方法來正確地從一個.ZIP文件中提取的.xlsx文件,以便它可以與OpenPyXL讀取。有許多文件需要像這樣處理,所以它必須在Excel外部,並希望儘可能高效。

乾杯!

+0

原始壓縮的'.xlsx'文件來自哪裏?有沒有可能得到一個例子? – Anthon

回答

0

聽起來這與從zipfile中提取無關,因爲如果您手動提取文件也會出現問題。 我會嘗試將打開並保存在Excel中的文件存儲在一個zip文件中,並查看會發生什麼情況。如果這是有效的,那麼顯然原始文件.xlsx的生成方式就是問題所在。 我強烈懷疑是這樣。

如果這是問題,請參閱是否可以提取.xlsx文件(它們是zipfiles本身),並將您用Excel重新保存的文件與原始問題文件進行比較。 xml不能輕易比較,因爲Excel可以隨意重新排列大多數東西,但是您可以進行差異化。