PHPEXCEL:如何根据计数动态合并单元格

时间:2018-08-20 04:33:29

标签: php loops phpexcel

我想使用PHPEXCEl根据计数动态合并单元格。

例如:

如果$count = 2; 我要合并两个单元格,如下所示,

$objPHPExcel->getActiveSheet()->mergeCells('A1:B1');

类似地,如果$count = 4;

$objPHPExcel->getActiveSheet()->mergeCells('C1:F1');

类似地,如果$count = 5;

$objPHPExcel->getActiveSheet()->mergeCells('G1:K1');

我想循环获得此逻辑。

我尝试了以下逻辑,但这不起作用

$count = ew_Execute("SELECT COUNT(*) FROM ems_defects_codes WHERE DEF_CODE = '$def_code'");
$start_letter = A;
$rowno = 1;
for ($i = 0; $i < $count ; $i++) {
    $objPHPExcel->getActiveSheet()->mergeCells($start_letter.$rowno.':'.$i.$rowno);
}

任何帮助将不胜感激。谢谢!!!

2 个答案:

答案 0 :(得分:1)

您需要获取输入的列范围字符串值-start_letter,row_number和count。一旦列范围可用,就可以在PHPExcel mergeCells函数中使用相同的列范围。这是获取列范围的示例代码:

function getColRange($start_letter, $row_number, $count) {

    $alphabets = range('A', 'Z');
    $start_idx = array_search(
        $start_letter,
        $alphabets
    );

    return sprintf(
        "%s%s:%s%s",
        $start_letter,
        $row_number,
        $alphabets[$start_idx + $count],
        $row_number
    );
}

print getColRange('A', 1, 2) . PHP_EOL;
print getColRange('C', 1, 4) . PHP_EOL;
print getColRange('G', 1, 4) . PHP_EOL;

输出

A1:C1
C1:G1
G1:K1

此外,您可以将此新功能与代码一起使用以进行实际合并。您可以选择调用此函数或循环调用。

$sheet = $objPHPExcel->getActiveSheet();
$sheet->mergeCells(
    getColRange(
        $start_letter,
        $row_number,
        $count
     )
 );

答案 1 :(得分:0)

问题是循环内的$i总是整数。您需要通过创建字母数组将整数转换为相应的字母索引。这可以通过简单的range('A', 'Z')完成。

您还需要将A中的$start_letter用撇号引起来(如'A'),并且现在已经创建了范围,您只需将字母的索引用于:
$start_letter = 0(后来变成'A'的{​​{1}})。

然后,您需要在计数中添加以获取$alphabet[$start_letter]中的结束单元格。您的起始单元格现在变成mergeCells(),而您的结束单元格现在变成$alphabet[$start_letter] . $rowno

这可以在下面看到:

($alphabet[$start_letter] + $alphabet[$i]) . $rowno