最近在做一个下载word的功能,遇到一个问题:合并相同的行,然后自己做了一下,到这分享给你们,(我写的代码只是样例,如果大佬们有更加好的可以教教我)
我的思路比较蠢:
首先,合并相同的行需要两个参数:start(开始位置),end(结束位置),循环查出来的结果,如果下一行和上一行的相同那么将记录num ++ ; 同时 记录将位置记录下来(这里我说的可能只是我自己的思路,不要着急看代码就可以了) 。那么,这两个参数的问题就解决了,
start = end - num;
代码:
$array = []; // 记录A这列合并行的数组
$array2 = []; // 记录B这列合并行的数组
$num = 1; // 记录A这列相同行的个数
$num2 = 1; // 记录B这列相同行的个数
$arr = []; // 记录A这列里面的 end位置 和 num 个数
$arr2 = []; // 记录B这列里面的 end位置 和 num 个数
for ($i = 0; $i < $dataNum; $i++) { if ($list[$i]['entrust_num'] == $list[$i + 1]['entrust_num']) { $arr["end"] = $i + 2; // 从第二行开始 记录end位置 $num++; // 记录相同行的个数, } else { if ($i != 0) { $arr["count"] = $num; // 程序执行到这说明相同的已经记录完, $array[] = $arr; // 记录下需要合并的信息 (多个) $arr = []; $num = 1; } } if ($list[$i]['sample_num'] == $list[$i + 1]['sample_num']) { $arr2["end"] = $i + 2; $num2++; } else { if ($i != 0) { $arr2["count"] = $num2; $array2[] = $arr2; $arr2 = []; $num2 = 1; } }
}
// 循环计算合并单元格 A (单元格是从A 2 开始计算合并的) foreach ($array as $k => $v) { $objPHPExcel->getActiveSheet(0)->mergeCells("A" . ($v['end'] + 2 - $v['count']) . ":A" . ($v['end'] + 1)); }
// 循环计算合并单元格 B (单元格是从 B2 开始计算合并的) foreach ($array2 as $k => $v) { $objPHPExcel->getActiveSheet(0)->mergeCells("B" . ($v['end'] + 2 - $v['count']) . ":B" . ($v['end'] + 1)); }
以上纯属于自己的数据和思路,只是一个列子,大家以自己的为准。一定要先有思路,后执行。赶紧行动吧。