日期: 2020年6月17日
分类: PHP
Tags: Excel
阅读量: 1,221
一、描述需求
如图,当我们遇到一条数据中,某一项内容有多条数据,为了方便文档查阅,我们需要在那一项数据进行拆分单元格。那么我的做法是,进行重组数组,将一条数据根据图中红框拆分成两条数据;并将除去【商品信息】其他项进行合并单元格即可。最终效果如下图:
二、上代码逻辑
上图为原数组,首先需要将这两个数组根据 $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,谢谢大家的阅读!祝每天开心~
版权声明:本文为博主原创文章,未经博主允许不得转载。
赞赏
微信赞赏支付宝赞赏