PHPExcel читает прошлое - PullRequest
       9

PHPExcel читает прошлое

6 голосов
/ 16 декабря 2011

Я использую PHPExcel для загрузки файлов xls в базу данных mysql.Все работает нормально, за исключением одной вещи: PHPExcel читает ВСЕ строки на рабочем листе, даже пустые, и, например, если у моего xls есть 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();
                     }

Ответы [ 2 ]

3 голосов
/ 07 августа 2012

Я использовал это, чтобы отфильтровать пустые строки. Хотя я печатаю их на экране для редактирования, возможно, это будет вам полезно:

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){}
    }
}
1 голос
/ 16 декабря 2011

3359 - это не число строк по умолчанию для пустого листа ... это означает, что тот, кто создал лист, действительно создал его с этими пустыми строками (возможно, случайно). Читателю все равно, пустая строка или нет, вы сказали ей прочитать лист, и он делает именно это.

Если вы точно не знаете, сколько строк вы хотите прочитать перед загрузкой книги (в этом случае вы можете применить фильтр чтения, чтобы прочитать только эти строки), вам нужно будет проверить каждую строку, чтобы убедиться, что она пуста или не в вашем цикле.

...