2012-11-16 53 views
2

如果我將phpexcel文檔保存爲僅包含值的Excel5格式,那麼引用該文檔的人員可以正常打開和關閉它。phpexcel在保存工作表之前計算公式

但是,如果我在細胞中放入一些公式,我有兩個不希望的結果。

就在保存文檔之前,我根據列的內容設置列寬。由於公式尚未計算出來,所以列似乎只與列中最大的單個值一樣大,因此寬度設置得太窄。一旦在excel中打開= sum()公式後,內容溢出了單元格寬度並顯示爲一串###。

第二個影響是,當總數由excel計算時,該書被標記爲由excel修改。當用戶嘗試退出該書籍時,系統會提示他們查看是否要保存其更改。這是令人不安的,因爲在他們的心目中,他們沒有改變任何事情和煩人,因爲這是他們真正不想與之抗爭的中斷。

我一直在搜索文檔。我找到了對$ objWriter-> setPreCalculateFormulas(true)的引用,但它對兩個問題都沒有幫助。

+0

我不是PHP excel的高手...但在vba中,您可以使用'Calculate'或'Application.Calculation = xlAutomatic'顯式計算公式,您將無法直接在PHP中使用它(我猜)但希望它會讓你走上正軌。 – Pynner

回答

2

如果列設置爲AutoSize,則PHPExcel會嘗試根據列的計算值(以及SUM()公式的結果)計算列寬,以及格式掩碼添加的任何其他字符(如千分離器。默認情況下,這是一個估計的寬度:基於使用GD,可以使用更準確的計算方法,但這是一個更大的開銷,所以默認關閉。您可以啓用使用

PHPExcel_Shared_Font::setAutoSizeMethod(PHPExcel_Shared_Font::AUTOSIZE_METHOD_EXACT); 

如果工作表中包含公式的更精確的計算,那麼MS Excel文件,某些版本的持有更多的信息,詳細的計算樹:不是由PHPExcel保存數據(因爲計算樹結構一個很大的開銷)。您不指明您使用哪種格式保存工作簿,或者您使用哪種版本的MS Excel打開它們;但這是任何提示在MS Excel中打開PHPExcel生成的文件時保存更改的正常解釋。

+0

我們使用Excel 2003 SP3打開文件。 正如原文的第一行所述,我保存在Excel5格式。 這是我使用的作者: $ objWriter = PHPExcel_IOFactory :: createWriter($ excel,'Excel5'); 如果切換編寫者會避免提示保存更改,這將使我的用戶感到非常高興。考慮到公司在可預見的將來會停留在Office 2003上,是否有更好的輸出選項?我在哪裏可以閱讀什麼$ objWriter-> setPreCalculateFormulas(true | false);呢? –

+0

@TedCohen完全無關:你爲什麼堅持使用Excel 2003?是因爲你打開了一個不贊成的文件格式,比如WK3,WK4等......?我們陷入了這種情緒,但我很樂意讓我們離開。 –

+0

這是公司所有者的經濟和實際決定。整個公司在一個圖像上具有實際優勢。每當微軟需要現金注入時,升級整個公司的成本非常高昂。 2003年做我們需要的一切。馬克解釋了發生事情的原因。這是由於我沒有意識到作者的優化。 –