我正在使用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();
                     }

最佳答案

3359不是空白工作表的默认行数...。这意味着创建工作表的人实际上是用那些空白行创建的(可能是无意间)。读者不在乎行是否为空白,您已经告诉它读取工作表,并且它确实做到了。

除非您确切知道要在加载工作簿之前要读取多少行(在这种情况下,您可以应用读取过滤器以仅读取那些行),否则您将需要测试每一行以查看其内部是否为空白for循环。

关于PHPExcel阅读超过$ highestRow,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8531171/

10-13 03:19