使用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]; }
最后调用并下载