【问题标题】:PHPExcel reading past $highestRowPHPExcel 读取超过 $highestRow
【发布时间】:2011-12-16 07:38:04
【问题描述】:

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

【问题讨论】:

  • 在您阅读文件之前 - 您是否从中过滤/删除行?

标签: php mysql phpexcel


【解决方案1】:

我用它来过滤掉空行。虽然我将它们打印在我的屏幕上进行编辑,但它可能对你有一些用处:

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){}
    }
}

【讨论】:

    【解决方案2】:

    3359 不是空白工作表的默认行数......这意味着创建工作表的人实际上是用这些空白行创建的(可能是无意的)。读者不在乎一行是否为空白,您已经告诉它阅读工作表,它就是这样做的。

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

    【讨论】:

    • 我已经用其他文件测试了相同的脚本,并且循环在包含数据的最后一行停止,您如何解释?没有办法获取数据的最后一行吗?
    • 我不需要解释:那些其他文件只是在最后一个数据行之后没有空白行创建的。任何数量的东西都可以在工作簿中添加空白行,包括(例如)样式设置、打印区域等。在 PHPExcel 中没有返回实际包含数据的最后一行的函数。
    • 这么好的应用却缺少这么简单的功能,感觉很奇怪,不过还是谢谢大家的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多