2014-09-19 185 views
1

我正在使用PHPExcel庫來讀取Microsoft Office Excel xlsx文件。我XLSX僅有一行:使用PHPExcel讀取Excel的內部計算值

enter image description here

當我試圖XLSX僅僅是一個zip文件,其中包含XML文件。我拉開我的XLSX文件

:~> unzip w2.xlsx -d w2 
Archive: w2.xlsx 
    inflating: w2/_rels/.rels 
    inflating: w2/docProps/app.xml 
    inflating: w2/docProps/core.xml 
    inflating: w2/xl/_rels/workbook.xml.rels 
    inflating: w2/xl/worksheets/sheet1.xml 
    inflating: w2/xl/styles.xml 
    inflating: w2/xl/workbook.xml 
    inflating: w2/[Content_Types].xml 

,打開W2/XL /工作表/ sheet1.xml包含下一XML(重要組成部分,顯示如下):

<sheetData> 
    <row collapsed="false" customFormat="false" customHeight="false" hidden="false" ht="12.1" outlineLevel="0" r="1"> 
    <c r="A1" s="1" t="n"> 
     <f aca="true">RAND()*10000/100</f> 
     <v>94.5569227915257</v> 
    </c> 
    <c r="C1" s="1"/> 
    </row> 
</sheetData> 

看來,Excel的內部存儲已經計算出的值。 PHPExcel庫是否有一些方法來讀取這個內部計算的值。我知道有像的getValue方法(返回式= RAND * 10000/1000),getCalculatedValue(計算值),getFormattedValue(還計算值)

+0

我在文件Cell.php中找到方法getOldCalculatedValue()。 – broadband 2014-09-19 08:16:47

回答

2

PHPExcel確實有一個方法,以檢索對於任何細胞,其值:

$objPHPExcel->getActiveSheet()->getCell('A1')->getOldCalculatedValue(); 

請注意,這不能保證....如果自動計算已在MS Excel中被禁用,那麼它只能作爲該MS Excel的實際執行的計算

1

其對上一次爲有效單元格式。如果是一般的「數字」,excel會顯示8位小數。您可以像這樣爲phpexcel中的每個單元格設置自定義格式。

$sheet->getStyle('A1') 
    ->getNumberFormat() 
    ->setFormatCode('0.0000000000'); 

我不完全確定格式(寫下O's)是否正確,暫時不能嘗試。 嘗試在設置自定義格式後獲取值getCalculatedValue

學分:user2131419/so

編輯: 哈*。只要貝克先生變成這個,你可以忽略我的帖子。與往常一樣,他的回答顯然是最正確的。 :)

+0

這裏的主題是單元格的計算值,我的意思是Excel已經計算出的值。雖然感謝指定setFormatCode,但也許它有一天會派上用場。 – broadband 2014-09-19 08:34:02

+0

我知道!問題在哪裏?我猜phpexcel會根據它的公式和格式獲得計算值。如果你先改變格式,然後得到計算值,它應該工作。這是我試圖指出的一切。 :) – C4u 2014-09-19 08:36:28

+0

這裏的問題是我想讀取值而不是公式來提供PHP和Excel之間的一致性。例如,PHP可以通過不同的原因計算出與Excel不同的值(舍入可能不同,內部表示...,PHP 5.6的功能與PHP 5.2不同)。如果有一種方法可以讀取已經計算好的Excel值,這樣我們就可以得到Excel的計算值,而不是PHP。 – broadband 2014-09-19 08:55:27