Welcome to

Mr.Xiong

Home / PHP / PHPExcel处理一个单元格内多条数据拆分成多个单元格多条数据

PHPExcel处理一个单元格内多条数据拆分成多个单元格多条数据

  • 作者:
  • 日期:
  • 分类: PHP
  • Tags:
  • 阅读量: 974

一、描述需求

如图,当我们遇到一条数据中,某一项内容有多条数据,为了方便文档查阅,我们需要在那一项数据进行拆分单元格。那么我的做法是,进行重组数组,将一条数据根据图中红框拆分成两条数据;并将除去【商品信息】其他项进行合并单元格即可。最终效果如下图:

二、上代码逻辑


上图为原数组,首先需要将这两个数组根据 $data[6] 重组为五个数组。

$newlist = [];
foreach ($list as $k => $v) {
    if (is_array($v[6])) {
        $temp = $v;
        $tempSix = $v[6];
        $temp[6] = '';
        foreach ($tempSix as $kk => $vv) {
            $temp[6] = $vv;
            $newlist[] = $temp;
        }
    }
}

效果及思路如图所示:


至此只完成了1/2,会导出五条数据,而实质上我们是要两条数据,只是【商品信息】这一项有多个单元格。

接下来我们进行完结。

首先我们需要知道 PHPExcel 合并单元格需要两个参数,起始和结束的单元格坐标,那么我们接下来重点就在处理这一块。思维精华如下代码,更多靠意会。。。

//获取$data[6]数量
foreach ($oldList as $k => $v) {
    $countArr[] = count($v[6]);
}
if ($countArr) {
    $numArr = [];
    $start = 4;//文档前三行是标题  所以start为4
    foreach ($countArr as $k => $v) {
        $end = ($start + $v) - 1;
        $numArr[] = [
            'start' => $start,//起始数
            'end' => $end,//结束数
        ];
        $start = $end + 1;
    }
}
$overcellkey = [];
foreach ($cellkey as $k => $v) {
    unset($cellkey[6]);//删除不需要合并单元格的字母
}
//遍历字母
foreach ($cellkey as $k => $v) {
    foreach ($numArr as $kk => $vv) {
        //拼接坐标
        $overcellkey[] = [
            'start' => $v . $vv['start'],//合并开始坐标
            'end' => $v . $vv['end'],//合并结束坐标
        ];
    }
}
if ($overcellkey) {
    foreach ($overcellkey as $k=>$v){
        //进行上下单元格合并。
        $sheet->mergeCells($v['start'] . ':' . $v['end']);
    }
}

收工效果:

Finally,谢谢大家的阅读!祝每天开心~
版权声明:本文为博主原创文章,未经博主允许不得转载。

赞赏

微信赞赏支付宝赞赏

2 条回应 “PHPExcel处理一个单元格内多条数据拆分成多个单元格多条数据”
  1. 猜呀猜不到 2020年6月19日 on 下午2:47 回复

    PHPExcel处理大数据量有点鸡肋了
    只能逐行读取 而且逐行读取的过程中实例化模型也会造成溢出的问题
    直接用PHP自带的缓冲读取CSV应该还可以 不过增加了人工成本
    来个大佬写个新插件吧我不想努力了 hiahiahia

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

雄心勃勃但谦卑温逊!

>> <<