2011-12-16 15 views
6

पढ़ रहा है मैं xs फ़ाइलों को एक mysql डेटाबेस में लोड करने के लिए PHPExcel का उपयोग कर रहा हूं। सबकुछ एक चीज को छोड़कर ठीक काम कर रहा है: PHPExcel वर्कशीट में भी सभी पंक्तियों को पढ़ता है, यहां तक ​​कि रिक्त वाले और यदि, उदाहरण के लिए, मेरे एक्सएलएस में 100 पंक्तियां होती हैं, पाठक सभी तरह से नीचे पंक्ति # 3359 (जो मुझे लगता है) खाली वर्कशीट के लिए पंक्तियों की डिफ़ॉल्ट संख्या)।

पाठक को रिक्त पंक्तियों को भी गिनती है? यह मेरा कोड है:

$objPHPExcel = PHPExcel_IOFactory::load($path); 
$objWorksheet = $objPHPExcel->setActiveSheetIndex(0); 

    $highestRow = $objWorksheet->getHighestRow(); 
    $highestColumn = $objWorksheet->getHighestColumn(); 
    $highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn); 
    $nrColumns = ord($highestColumn) - 64; 

    $rowsadded=0; 
    $begin_row=5; // 1st line of data in excel file 
    for ($row = $begin_row; $row <= $highestRow; ++ $row) { 
     $val=array(); 
     for ($col=0; $col < $highestColumnIndex; $col++) { 
      $cell = $objWorksheet->getCellByColumnAndRow($col, $row); 
      $val[] = $cell->getValue(); 
     } 

     if ($val[0]<>'' && $val[1]<>'') { //check that row contains data before inserting 

      $rowsadded++; 
      $sql1 = sprintf("INSERT INTO aitisi (name_u, onoma_u, asf_gr, code, compid, im_egr, im_exp, symb, programa, cost, showcost, omadiko, ar_tayt, afm, dieyth, poli, til_st, til_kin, ep_te1, on_te1, ep_te2, on_te2, ep_te3, on_te3, ep_te4, on_te4, name_us, onoma_us) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)", 
        GetSQLValueString($val[0], "text"), 
        GetSQLValueString($val[1], "text"), 
             ... 
        GetSQLValueString($val[11], "text"), 
        GetSQLValueString($val[12], "text"), 
        GetSQLValueString($val[13], "text"), 
        GetSQLValueString($val[14], "text"), 
        GetSQLValueString($val[15], "text"), 
        GetSQLValueString($val[16], "text"), 
        GetSQLValueString($val[17], "text")).';'; 
      $result = mysql_query($sql1) or die(mysql_error()); 
      $field_id = mysql_insert_id(); 
        } 
+0

फ़ाइल पढ़ने से पहले - क्या आप इससे पंक्तियां फ़िल्टर/हटाते हैं? – matino

+0

,ο, मैं बस इसे अपलोड करता हूं। – bikey77

उत्तर

1

3359 एक रिक्त कार्यपत्रक के लिए पंक्तियों की डिफ़ॉल्ट संख्या नहीं है .... इसका मतलब है कि जो कोई भी कार्यपत्रक बनाया वास्तव में उन रिक्त लाइनों (शायद अनजाने) के साथ उसे बनाया था। पाठक परवाह नहीं है कि कोई पंक्ति खाली है या नहीं, आपने इसे वर्कशीट पढ़ने के लिए कहा है और यह ठीक है।

जब तक आप कार्यपुस्तिका लोड करने से पहले कितनी पंक्तियां पढ़ना चाहते हैं, तो आप जानते हैं कि आप केवल उन पंक्तियों को पढ़ने के लिए एक पठन फ़िल्टर लागू कर सकते हैं), आपको यह देखने के लिए प्रत्येक पंक्ति का परीक्षण करना होगा कि यह खाली है या नहीं या लूप के लिए अपने भीतर नहीं।

+0

मैंने अन्य फाइलों के साथ एक ही स्क्रिप्ट का परीक्षण किया है और डेटा युक्त अंतिम पंक्ति में लूप रुक गया है, आप इसे कैसे समझाते हैं? क्या डेटा के साथ अंतिम पंक्ति प्राप्त करने का कोई तरीका नहीं है? – bikey77

+0

मुझे इसे समझाने की आवश्यकता नहीं है: उन अन्य फ़ाइलों को अंतिम डेटा पंक्ति के बाद खाली पंक्तियों के बिना बनाया गया था। किसी भी चीज में कार्यपुस्तिका में रिक्त पंक्तियां शामिल हो सकती हैं, जिनमें (उदाहरण के लिए) स्टाइल सेटिंग्स, प्रिंट एरिया इत्यादि शामिल हैं। अंतिम पंक्ति को वापस करने के लिए कोई फ़ंक्शन नहीं है जिसमें वास्तव में PHPExcel में डेटा शामिल है। –

+0

अजीब लगता है कि इस तरह के एक अच्छे आवेदन में इतना आसान काम नहीं है लेकिन वैसे भी, आपकी सहायता के लिए धन्यवाद। – bikey77

3

मैंने खाली पंक्तियों को फ़िल्टर करने के लिए इसका इस्तेमाल किया। हालांकि मैं उन्हें संपादित करने के लिए अपनी स्क्रीन पर प्रिंट कर सकता हूं, शायद यह आपके लिए कुछ उपयोग होगा:

foreach($worksheet->getRowIterator() as $row) { 
    $range = 'A'.$row->getRowIndex().':'.$highestColumn.$row->getRowIndex(); 
    $rowData = $worksheet->rangeToArray($range, NULL,TRUE,TRUE,TRUE); 
    $rowData = $rowData[$row->getRowIndex()]; 
    if(implode("",$rowData) != "") { 
     foreach($rowData as $column => $value){} 
    } 
}