使用 PhpOffice\PhpSpreadsheet,返回是数组。但是合并单元格时,只返回合并单元格的单个值,其他值为null。
public function excelUpload()
{
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
// $reader->setReadDataOnly(true); // 当setReadDataOnly设置为true是$sheet->getMergeCells()方法会返回空数组
$spreadsheet = $reader->load('2022.xlsx');
$sheet = $spreadsheet->getActiveSheet();
$this->fillEmptyMergeCells($sheet);
$data = $sheet->toArray();
return $data;
}
public function fillEmptyMergeCells($sheet)
{
$mergeCells = array_values($sheet->getMergeCells());
for ($i = 0; $i < count($mergeCells); $i++) {
// explode merge cells range,example N25:N27
$CellIndex = explode(":", $mergeCells[$i]);
// get main cell value, example N25
$CellValue = $sheet->getCell($CellIndex[0])->getValue();
// start index
$StartIndex = (int) substr($CellIndex[0], 1, 2);
// end index
$EndIndex = (int) substr($CellIndex[1], 1, 2);
// column name example "A" ,"B", max "Z"
$ColumnName = substr($CellIndex[0], 0, 1);
// loop to copy the value from main cell to merge cells
for ($j = $StartIndex; $j <= $EndIndex; $j++) {
$sheet->setCellValue($ColumnName . $j, $CellValue);
}
}
}