2012-03-21 17 views
5

मैं किसी पृष्ठ पर एक्सेल फ़ाइल डेटा प्रिंट करने का प्रयास कर रहा हूं। यह मैं PHPExcel lib इस्तेमाल किया करने के लिए, सब अच्छा काम करता है, मुद्रण सूत्रों के बगल में, मैं इस तरह के सूत्र =SUM(C2:C5)PHP एक्सेल सूत्रों की गणना

मैं इस तरह से मान प्रिंट के साथ ही सरल उदाहरण है:

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

मैं कैसे जांच कर सकते हैं $ वैल एक सूत्र है?

PHPExcel_Cell_DataType::dataTypeForValue($val); मुझसे कहा था कि यह मेरी $val

ऑप्टिकल फाइबर केबल में एक बस एक और एक स्ट्रिंग मैं एक पाश में यह गणना कर सकते हैं, और chek है अगर यह `सा अंतिम पंक्ति - हाथ से आवश्यक जानकारी डालें, लेकिन मैं कैसे कर सकते हैं इसे आसान तरीका की गणना करें?

आपकी सलाह सुनकर प्रसन्नता होगी। धन्यवाद।

उत्तर

9

PHPExcel_Cell_DataType::dataTypeForValue($val); हमेशा की तरह, एक सूत्र के लिए आप स्ट्रिंग बता देंगे क्योंकि एक सूत्र एक श्रृंखला है। एक सूत्र होने के नाते सेल से संबंधित है, डेटा नहीं। सेल ऑब्जेक्ट की getDataType() विधि फॉर्मूला के लिए 'f' लौटाएगी।

यदि आप के बजाय getCalculatedValue() का उपयोग करते हैं, तो PHPExcel यह निर्धारित करेगा कि सेल में सूत्र है या नहीं। यदि ऐसा होता है, तो यह परिणाम की गणना करेगा और उसे वापस कर देगा, अन्यथा यह getValue(); द्वारा जो कुछ भी लौटाया जाएगा, वह वापस लौटाएगा अन्य विधि जिसे आप विचार कर सकते हैं getFormattedValue() है जो एक स्ट्रिंग वापस कर देगा, जो सेल के लिए जो भी नियम निर्धारित है, के अनुसार प्रारूपित । और यदि यह एक सूत्र सेल था, तो यह गणना भी कर लेगी। तिथियों के रूप में स्वरूपित कोशिकाओं से संख्यात्मक मान के बजाय दिनांक स्ट्रिंग प्राप्त करने के लिए विशेष रूप से उपयोगी।

आप toArray() या rangeToArray() विधियों का उपयोग कर कोशिकाओं की लूपिंग से बच सकते हैं, जो सेल मानों की एक सरणी वापस कर देगा, हालांकि आपको अभी भी सरणी को लूप करना होगा। इन दोनों विधियों में तर्क हैं कि आप यह निर्धारित करने की अनुमति देते हैं कि सूत्रों की गणना की जानी चाहिए, और क्या प्रारूपण लागू किया जाना चाहिए।

+0

क्षमा करें, लेकिन क्या आप नमूना कोड दिखा सकते हैं? – enchance

+0

क्या के लिए नमूना कोड? परीक्षण के लिए यदि किसी कक्ष में सूत्र है? एक सूत्र सेल के लिए गणना मूल्य प्राप्त करना? या किसी भी toArray() प्रकार विधियों का उपयोग कर? –

+0

'f'' उपयोग प्रकार 'PHPExcel_Cell_DataType :: TYPE_FORMULA' के विरुद्ध जांच करने के बजाय। DataType.php –

3

"मैं कैसे जांच सकता हूं कि $ वैल एक फॉर्मूला है या नहीं?"

एक्सेल में हर सूत्र तो = के साथ शुरू:

<?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'; 
} 
?> 

या

<?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

हाँ, आप सही हैं। लेकिन अगर मेरी मेज अधिक व्यापक हो गई और कल मेरे पास एक सूत्र होगा, तो आपको लगता है कि मुझे कक्षाओं को सभी सूत्रों को पार्स करने के साथ लिखना चाहिए? =) मुझे लगता है कि डेवलपर्स द्वारा पहले से ही लिखा गया है, लेकिन मैं उन्हें नहीं ढूंढ सकता। –

+0

हां आपको सब कुछ पार्स करने की आवश्यकता हो सकती है ... लेकिन यदि आप एक स्ट्रिंग को पार्स करते हैं (एक्सेल फ़ाइल से सभी डेटा के साथ) तो आप इसके लिए रेगेक्स का उपयोग कर सकते हैं। –

+0

ठीक है, मुझे नहीं पता कि मुझे कितने रिकॉर्ड होना चाहिए। मान लीजिए कि तालिका में 1000 रिकॉर्ड हैं, और मुझे टेबल प्रिंट करने के लिए 1 लूप की आवश्यकता है और एक और लूप को योग प्राप्त करने के लिए, इसके अलावा अगर मुझे रिकॉर्ड की औसत या कुछ ऐसा कुछ अन्य फ़ंक्शन चाहिए, तो memmory के साथ क्या होगा? –

संबंधित मुद्दे