2012-11-08 93 views
3

我有一個集成python和Excel(感謝xlwt)的工作程序。我正在讀取一個csv文件並複製到一個excel中。雖然我這樣做,我也有幾個公式,我在xlwt中使用公式模塊。具體來說,代碼是Python excel集成,#VALUE錯誤

ws_xlwt.write(3,3, Formula("MMULT(MINVERSE(C11:D12),"+col_char+"2:"+col_char+"3)"), style) 

col_char是在循環中生成的ASCII代碼。陣列(C11:D12)包含使用代碼生成的數據:

ws_xlwt.write(10,2, Formula("SUMPRODUCT($C$36:$C$161,$C$36:$C$161)"), style) 

當程序運行時,它正確地把在公式中的特定細胞。但單元格顯示錯誤「#VALUE」而不是結果。有趣的一點是,當我打開excel文件時,雙擊該特定單元格進行編輯,然後按下Enter鍵而不更改任何內容,結果顯示。我不確定這是一個Python集成問題還是Excel問題。

OS - Windows 7 64-bit 
Python - 2.7 32-bit 

回答

1

我最好的猜測是它是由於公式的評估。我不相信xlwt會在插入公式時評估這些公式,這意味着您會得到一個值錯誤,因爲12的結果在評估MMULT函數時不存在。當您雙擊並點擊回車時,它的工作原理是因爲Excel現在正在重新計算所有內容,從而爲您提供有效的結果。

+0

這正是我的想法。因此,我在sumproduct和mmult之間包含了 wb_xlwt.save(os.path.splitext(file_name)[0] +「。xls」)ws_xlwt.write(10,2,Formula(「SUMPRODUCT (「+ col_char +」36:「+ col_char +」161,$ O $ 36:$ O $ 161)「),style) \t \t \t wb_xlwt.save(os.path.splitext(file_name)[0] +」。xls「 ) \t \t \t ws_xlwt.write(3,3,式( 「MMULT(MINVERSE(C11:D12),」 + col_char + 「2:」 + col_char + 「3)」),風格) 這應該有效節省工作表和書,然後再次寫入(我認爲),因此消除了錯誤。它仍然沒有解決這個問題。 因此,簡而言之它現在讀取.. – groovyrv

+1

@groovyrv我不認爲保存它會做詭計 - 你需要打開它後,你寫的原始公式,以強制Excel計算它(Excel需要參與因爲'xlwt'本身不做任何計算)。 – RocketDonkey

+1

@groovyrv做了一些更多的研究,並且看起來就是這種情況,您需要打開/關閉Excel以使其工作。看到這篇文章(http://stackoverflow.com/questions/4198365/facing-problem-with-xlwt-and-xlrd-reading-and-writing-simultaneously),作者指出這是問題。您可能需要將腳本分成幾部分,並根據需要打開Excel;或以編程方式打開/關閉它。 – RocketDonkey