使用PHPexcel删除指定的单元格

,使用PHPexcel删除指定的单元格(表头)

/**
     * 导出 删除指定的单元格
     * @param $objPHPExcel 类
     * @param array $remove_column  需要删除的单元格
     * @date 2023/1/3
     * @return void
     */
    private function remove_column($objPHPExcel, $remove_column)
    {
        //单元格模板值,用于匹配要删除的列(在excel模板第一列)
        $cell_val = '';
        //单元格总列数
        $highestColumn = $objPHPExcel->getActiveSheet()->getHighestColumn();
        // 获取字母中的key
        $codeNum = $this->getCodeNumber('', $highestColumn);
        for ($i = 0; $i <= $codeNum;) {
            // 根据 key 获取字母
            $column = $this->getCodeNumber($i);
            //列数是以A列开始
            $cell_val = $objPHPExcel->getActiveSheet()->getCell($column . "1")->getValue();
            //移出没有权限导出的列
            //移出后column不能加1,因为当前列已经移出加1后会导致删除错误的列
            if (strlen($cell_val) > 0 && in_array($cell_val, $remove_column)) {
                $objPHPExcel->getActiveSheet()->removeColumn($column);
            } else {
                $i++;
            }
        }
    }

由于 php 中使用 for 或者 foreach 循环 A-BA 字母时出现了字符编码的问题。PS:用不用ord 、 chr 都一样会有问题

for ($i = ord('A'); $i <= ord('BA'); $i++) {
    echo chr($i) . '<br/>';
}

 

 

 所以我这边借用了一个方法( PHP For循环字母A-Z当超过26个字母时输出AA,AB,AC ),因为目前的需求就到 ZZ。所以设置为 701

/**
     * 循环字母 A-ZZ 并 获取字母中的 key 和 value
     * @param $key
     * @param $code
     * @date 2023/1/3
     * @return false|int|mixed|string
     */
    private function getCodeNumber($key, $code = false)
    {
        // 循环 A-ZZ
        for ($i = 0; $i <= 701; $i++) {
            $y = ($i / 26);
            if ($y >= 1) {
                $y = intval($y);
                $yCode[] = chr($y + 64) . chr($i - $y * 26 + 65);
            } else {
                $yCode[] = chr($i + 65);
            }

        }
        // 获取 key
        if ($code) {
            return array_search($code, $yCode);
        }
        // 获取 value
        return $yCode[$key];
    }

最后调用并下载

 

posted @ 2023-01-03 16:23  Func~  阅读(138)  评论(0编辑  收藏  举报