【问题标题】:Generate a matrix from an excel worksheet [ExcelBundle-Symfony]从 excel 工作表生成矩阵 [ExcelBundle-Symfony]
【发布时间】:2015-03-25 09:39:36
【问题描述】:

我制作了以下函数来从工作表中获取矩阵。

private function getMatrixFromSheet($worksheet){
    foreach ($worksheet->getRowIterator() as $row) {
        $cellIterator = $row->getCellIterator();
        $cellIterator->setIterateOnlyExistingCells(false);
        foreach ($cellIterator as $cell) {
            if (!is_null($cell)) {
                $matrix[$cell->getRow()][$cell->getColumn()] = $cell->getCalculatedValue();
            }
        }
    }
    return $matrix;
}

这样如果我想访问第二行第二列单元格,我可以$matrix[2]['B']

我需要能够以数字形式访问矩阵索引,以便以 $matrix[2][2] 访问前一个单元格。

有没有办法做到这一点?
我尝试将$cell->getColumn() 转换为整数,但不幸的是(int) "a" == 0

【问题讨论】:

    标签: php excel type-conversion


    【解决方案1】:

    如果您只想要列的数值,那么 PHPExcel 提供了一个静态辅助方法来精确地做到这一点

    $columnIndex = PHPExcel_Cell::columnIndexFromString($cell->getColumn());
    

    A 列返回 1,B 列返回 2,AA 列返回 27,AB 列返回 28,等等

    但是,您可能会发现您可以完全简化您的函数,因为 PHPExcel 还提供了 toArray() 方法来完成您编写此方法的目的:

    private function getMatrixFromSheet($worksheet){
        return $worksheet->toArray();
    }
    

    请注意,toArray() 返回的矩阵的行/列偏移量是从 0 开始的

    【讨论】:

    • 完美!正是我需要的!不幸的是我没有看到toArray 方法,这可以让我节省时间!
    • 无论如何我都在尝试使用PHPExcel_Cell::columnIndexFromString 方法,但我还需要为PHPExcel_Cell 的命名空间添加use 语句。是哪个?
    • 我不熟悉 Symfony 的 ExcelBundle,但由于 PHPExcel 没有命名空间,我怀疑它可能被视为在全局命名空间中
    • 找到了!我不知道这是我的配置问题还是 ExcelBundle 是这样工作的,无论如何我需要添加use PHPExcel_Cell;。将更新您的解决方案
    猜你喜欢
    • 2012-02-20
    • 1970-01-01
    • 1970-01-01
    • 2016-10-19
    • 2021-12-17
    • 2011-06-07
    • 1970-01-01
    • 1970-01-01
    • 2014-10-19
    相关资源
    最近更新 更多