2012-07-23 13 views
19

के साथ वर्कशीट्स के माध्यम से लूपिंग मैं एक्सेल फ़ाइल पढ़ने और उस पर प्रसंस्करण करने के लिए PHPExcel लाइब्रेरी का उपयोग कर रहा हूं। मैं प्रत्येक वर्कशीट के माध्यम से लूप करना चाहता हूँ। मैंने प्रलेखन की जांच की और मुझे लगता है कि सक्रिय वर्कशीट इंडेक्स बदल रहा था या केवल निर्दिष्ट वर्कशीट लोड कर रहा था। मैं सभी वर्कशीट्स के माध्यम से कैसे लूप कर सकता हूं?PHPExcel

किसी भी मदद के लिए धन्यवाद।

यहाँ संदर्भ के लिए, प्रलेखन के पाशन उदाहरण है:

<?php 
$objReader = PHPExcel_IOFactory::createReader('Excel2007'); 
$objReader->setReadDataOnly(true); 

$objPHPExcel = $objReader->load("test.xlsx"); 
$objWorksheet = $objPHPExcel->getActiveSheet(); 

echo '<table>' . "\n"; 
foreach ($objWorksheet->getRowIterator() as $row) { 
    echo '<tr>' . "\n"; 

    $cellIterator = $row->getCellIterator(); 
    $cellIterator->setIterateOnlyExistingCells(false); // This loops all cells, 
                // even if it is not set. 
                // By default, only cells 
                // that are set will be 
                // iterated. 
    foreach ($cellIterator as $cell) { 
    echo '<td>' . $cell->getValue() . '</td>' . "\n"; 
    } 

    echo '</tr>' . "\n"; 
} 
echo '</table>' . "\n"; 
?> 

उत्तर

9

आप iterators का उपयोग कर रहे हैं। क्या आपने/टेस्ट निर्देशिका में इटरेटर के लिए कोड उदाहरण देखा था? यदि हां, तो आप WorksheetIterator के संदर्भ में देखा हो सकता है

वैकल्पिक रूप से, getAllSheets() PHPExcel वस्तु की विधि कार्यपत्रकों की एक सरणी है, जो आप एक foreach पाश

+0

बहुत बहुत धन्यवाद! मुझे टेस्ट निर्देशिका में iterator मिला - 28iterator.php। getAllSheets() भी अच्छा लग रहा है। धन्यवाद। – user717236

14

मुझे लगता है कि आप यह कर सकते हैं का उपयोग करने की अनुमति देता रिटर्न । सक्रिय पत्रक को बढ़ा देते जब तक वहाँ किसी भी छोड़ दिया नहीं कर रहे हैं, तो क्या आप के साथ चाहते हैं हर एक:

<?php 

    $objReader = PHPExcel_IOFactory::createReader('Excel2007'); 
    $objReader->setReadDataOnly(true); 

    $objPHPExcel = $objReader->load("test.xlsx"); 

    $i = 0; 
    while ($objPHPExcel->setActiveSheetIndex($i)){ 

     $objWorksheet = $objPHPExcel->getActiveSheet(); 
     //now do whatever you want with the active sheet 
     ... 
     $i++; 

    } 

    ... 

?> 
+0

आपकी मदद के लिए बहुत बहुत धन्यवाद। यह अच्छी तरह से काम करता है! – user717236

+0

दिलचस्प दृष्टिकोण। उस उत्तर के लिए धन्यवाद। – Yitzhak

+1

आपको प्रयास करने की आवश्यकता है ... निर्माण को पकड़ें, क्योंकि अंतिम पृष्ठ अपवाद –

7

यहाँ एक उपयोगी समारोह मैं शीट से अधिक पुनरावृत्ति और शीट के साथ प्रत्येक के लिए कक्ष मान की एक सरणी लौटने के लिए उपयोग करें सरणी कुंजी के रूप में शीर्षक:

function getSheets($fileName) { 
    try { 
     $fileType = PHPExcel_IOFactory::identify($fileName); 
     $objReader = PHPExcel_IOFactory::createReader($fileType); 
     $objPHPExcel = $objReader->load($fileName); 
     $sheets = []; 
     foreach ($objPHPExcel->getAllSheets() as $sheet) { 
      $sheets[$sheet->getTitle()] = $sheet->toArray(); 
     } 
     return $sheets; 
    } catch (Exception $e) { 
     die($e->getMessage()); 
    } 
}