1

我想使用 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);
}

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

4

2 回答 2

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
     )
 );
于 2018-08-20T05:19:23.893 回答
0

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

您还需要将Ain包含$start_letter在撇号(as 'A')中,现在已经创建了范围,您可以简单地使用字母表的索引:(
$start_letter = 0后来变成'A'with $alphabet[$start_letter])。

然后,您需要起始字母添加到计数中,以便将结束单元格放入mergeCells(). 你的起始单元格现在变成了$alphabet[$start_letter] . $rowno,你的结束单元格现在变成了($alphabet[$start_letter] + $alphabet[$i]) . $rowno

这可以在下面看到:

$count = ew_Execute("SELECT COUNT(*) FROM ems_defects_codes WHERE DEF_CODE = '$def_code'");
$alphabet = range('A', 'Z');
$start_letter = 0;
$rowno = 1;
for ($i = 0; $i < $count; $i++) {
    $objPHPExcel->getActiveSheet()->mergeCells($alphabet[$start_letter] . $rowno . ':' . ($alphabet[$start_letter] + $alphabet[$i]) . $rowno);
}
于 2018-08-20T04:43:22.917 回答