2012-03-21 200 views
5

我試圖在頁面上打印Excel文件數據。要做到這一點,我用PHPExcel lib下,所有的工作好,印刷公式旁邊,我有這樣的公式=SUM(C2:C5)PHP Excel計算公式

我在這樣的方式進行打印,值簡單的例子:

$val = $cell->getValue(); 
echo '<td>' . $val . '</td>'; 

我怎麼能檢查是否$ VAL是一個公式?

PHPExcel_Cell_DataType::dataTypeForValue($val);告訴我,這是一個只是在我$val

OFC另一個字符串我可以在一個循環計算的話,和赤如果it`sa最後一行 - 通過插入所需手中的信息,但我怎麼能計算它簡單的方法?

很高興聽到您的建議。謝謝。

回答

9

PHPExcel_Cell_DataType::dataTypeForValue($val);總會告訴你字符串的公式,因爲公式是一個字符串。作爲一個公式與細胞有關,而不是數據。單元格對象的getDataType()方法將返回公式爲'f'

如果您使用getCalculatedValue()而不是getValue(),那麼PHPExcel將確定該單元格是否包含公式。如果是,那麼它將計算結果並返回該結果,否則它將簡單地返回getValue();返回的其他方法。您可能考慮的另一種方法是getFormattedValue(),它將返回一個字符串,根據爲單元格設置的任何規則進行格式化。如果它是一個公式單元格,那麼它也會進行計算。從格式化爲日期的單元格獲取日期字符串而非數值特別有用。

您還可以通過使用toArray()rangeToArray()方法避免循環單元格,該方法將返回單元值數組,但您仍需要循環數組。這兩種方法都有參數,允許您設置是否計算公式以及是否應用格式。

+0

對不起,但你可以顯示一個示例代碼? – enchance 2013-02-25 19:30:58

+0

什麼樣的代碼?用於測試單元格是否包含公式?獲取公式單元格的計算值?或者使用任何toArray()類型的方法? – 2013-02-25 21:01:38

+0

而不是檢查「f」使用類型「PHPExcel_Cell_DataType :: TYPE_FORMULA」。所有的單元格類型都在DataType.php的'class PHPExcel_Cell_DataType'中聲明 – 2016-03-30 10:52:10

3

「我如何檢查$ val是否是公式?」

在Excel中每個公式入手=這樣:

<?php 
$String = 'SUM(B3:B8)'; 

# See http://www.php.net/manual/en/language.types.string.php 
# $String{} is deprecated as of PHP 6. 
if($String[0] == '='){ 
    echo 'Yes'; 
} else { 
    echo 'No'; 
} 
?> 

OR

<?php 
function IsExcelFormula($String=null){ 
    if(!$String OR strlen($String) <= 0){ 
     return false; 
    } 

    $First = $String[0]; 

    return ($First == '=' ? true : false); 
} 

var_dump(IsExcelFormula('=SUM(B8:B9)')); // bool(true) 
var_dump(IsExcelFormula('TOTAL(B3:B6)')); // bool(false) 
?> 
+0

Yeap,你說得對。但是如果我的桌子變得更寬,明天我會有更多的一個公式,你認爲我應該寫解析所有公式的類? =)我認爲這已經是開發者寫的,但我找不到它們。 – 2012-03-21 17:31:25

+0

是的,你可能需要解析所有東西......但是如果你解析一個字符串(使用Excel文件中的所有數據),你可以使用正則表達式。 – 2012-03-21 17:33:32

+0

好吧,我不知道我應該有多少記錄。假設這個表有1000條記錄,我需要1個循環來打印表格,另外一個循環來獲得總和,除此之外,如果我需要一些其他功能,如平均記錄或類似的東西,會在內存中發生什麼? – 2012-03-21 17:42:34