使用PhpSpreadsheet向Excel文件追加内容

<?php
declare(strict_types=1);
ini_set('display_errors', 'On');
error_reporting(-1);

require_once __DIR__ . '/PhpSpreadsheet-1.19.0/vendor/autoload.php'; // 本次演示使用1.19.0版本

use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
use PhpOffice\PhpSpreadsheet\Style\Alignment;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;

// Excel文件路径
$filename = __DIR__ . '/test.xlsx';

// 新增行数据
$add = [
    ['name' => '张三', 'gender' => '男', 'birth' => '2003'],
    ['name' => '李四', 'gender' => '女', 'birth' => '2004'],
    ['name' => '王五', 'gender' => '男', 'birth' => '2005'],
];

// 载入Excel文件
$spreadsheet = IOFactory::load($filename);

// 激活第1个Sheet
try {
    $spreadsheet->setActiveSheetIndex(0); // Sheet编号从0开始
} catch (\PhpOffice\PhpSpreadsheet\Exception $e) {
    exit('激活Sheet失败:' . $e->getMessage());
}

// 获取当前激活的Sheet
$activeSheet = $spreadsheet->getActiveSheet();

// 获取最高行号
$row = $activeSheet->getHighestRow();

/**
 * 设置单元格内容左对齐
 *
 * @param Worksheet $sheet 目标Sheet
 * @param string $pCellCoordinate 单元格坐标,示例:A1、B1、C1
 * @return void
 */
function set_horizontal_left(Worksheet $sheet, string $pCellCoordinate): void
{
    $sheet->getStyle($pCellCoordinate)->getAlignment()->setHorizontal(Alignment::HORIZONTAL_LEFT);
}

// 插入新数据
foreach ($add as $data) {
    $row++; // 先移到下一行

    $activeSheet->setCellValue("A$row", $data['name']);
    set_horizontal_left($activeSheet, "A$row"); // 设置单元格内容左对齐

    $activeSheet->setCellValue("B$row", $data['gender']);
    set_horizontal_left($activeSheet, "B$row"); // 设置单元格内容左对齐

    $activeSheet->setCellValue("C$row", $data['birth']);
    set_horizontal_left($activeSheet, "C$row"); // 设置单元格内容左对齐
}

// 创建Writer对象保存Excel文件
$writer = new Xlsx($spreadsheet);
try {
    $writer->save($filename);
} catch (\PhpOffice\PhpSpreadsheet\Writer\Exception $e) {
    exit("保存Excel文件[$filename]失败:" . $e->getMessage());
}


// 保存Excel文件后其内容如下:
// --------------------------------------------------
// 姓名  性别  出生年份
// 刘一  男    2001      [原有数据]
// 陈二  女    2002      [原有数据]
// 张三  男    2003      [新增数据]
// 李四  女    2004      [新增数据]
// 王五  男    2005      [新增数据]

Copyright © 2024 码农人生. All Rights Reserved