Noo*_*Sad 2 php codeigniter phpexcel web
我需要 phpexcel 中循环逻辑的帮助,它可以合并具有相同事务 id 的行
这是示例代码
foreach ($transaction as $key => $value) {
// I need if condition for $merge (ex. N4:N5)
$excel->getActiveSheet()->mergeCells($merge);
}
Run Code Online (Sandbox Code Playgroud)
我尝试了一些逻辑,将最后一个循环事务 ID 与当前事务 ID 进行比较。但我的逻辑仍然很糟糕并且不能很好地运作。
我想要这样的结果
以下解决方案是使用PHPSpreadSheet(PHPExcel 的升级版)开发的。但是,您应该能够将方法调整为 PHPExcel,因为逻辑应该是相同的。
主要逻辑是(对于每个循环):
最后,使用mergeCells()方法渲染合并:
$spreadsheet->getActiveSheet()->mergeCells($cellToMerge);
Run Code Online (Sandbox Code Playgroud)完整示例代码:
<?php
require_once('vendor/autoload.php');
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
$path = dirname(__FILE__);
$data = array(
array(1, 'INV201806001', '1000'),
array(2, 'INV201806001', '1000'),
array(3, 'INV201806002', '0'),
array(4, 'INV201807001', '1000'),
array(5, 'INV201807001', '1000'),
array(6, 'INV201807001', '1000'),
array(7, 'INV201807002', '0'),
array(8, 'INV201807002', '0'),
);
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$row = 3;
$startRow = -1;
$previousKey = '';
foreach($data as $index => $value){
if($startRow == -1){
$startRow = $row;
$previousKey = $value[1];
}
$sheet->setCellValue('C' . $row, $value[0]);
$sheet->setCellValue('D' . $row, $value[1]);
$sheet->setCellValue('E' . $row, $value[2]);
$nextKey = isset($data[$index+1]) ? $data[$index+1][1] : null;
if($row >= $startRow && (($previousKey <> $nextKey) || ($nextKey == null))){
$cellToMerge = 'E'.$startRow.':E'.$row;
$spreadsheet->getActiveSheet()->mergeCells($cellToMerge);
$startRow = -1;
}
$row++;
}
$writer = new Xlsx($spreadsheet);
$writer->save('test-xls-merge.xlsx');
Run Code Online (Sandbox Code Playgroud)
这是上面代码的截图:
| 归档时间: |
|
| 查看次数: |
5324 次 |
| 最近记录: |