使用PHPExcel向Excel文件追加内容

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

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

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

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

// 载入Excel文件
try {
    $pPHPExcel = PHPExcel_IOFactory::load($filename);
} catch (PHPExcel_Reader_Exception $e) {
    exit("载入Excel文件[$filename]失败:" . $e->getMessage());
}

// 激活第1个Sheet
try {
    $pPHPExcel->setActiveSheetIndex(); // 形参$pIndex缺省值为0,即激活第1个Sheet
} catch (PHPExcel_Exception $e) {
    exit('激活Sheet失败:' . $e->getMessage());
}

// 获取最高行号
try {
    $row = (int)$pPHPExcel->getActiveSheet()->getHighestRow() + 1;
} catch (PHPExcel_Exception $e) {
    exit('获取最高行号失败:' . $e->getMessage());
}

/**
 * 设置单元格内容左对齐
 *
 * @param PHPExcel $pPHPExcel PHPExcel对象
 * @param string $pCoordinate 单元格坐标,示例:A1、B1、C1
 * @return void
 */
function set_horizontal_left(PHPExcel $pPHPExcel, string $pCoordinate): void
{
    try {
        $pPHPExcel->getActiveSheet()->getStyle($pCoordinate)->getAlignment()
            ->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
    } catch (PHPExcel_Exception $e) {
        exit("设置[$pCoordinate]单元格内容左对齐失败:" . $e->getMessage());
    }
}

// 插入新数据
foreach ($add as $data) {
    try {
        $pPHPExcel->getActiveSheet()->setCellValue("A$row", $data['name']);
    } catch (PHPExcel_Exception $e) {
        exit("设置[A$row]单元格内容失败:" . $e->getMessage());
    }
    set_horizontal_left($pPHPExcel, "A$row");

    try {
        $pPHPExcel->getActiveSheet()->setCellValue("B$row", $data['gender']);
    } catch (PHPExcel_Exception $e) {
        exit("设置[B$row]单元格内容失败:" . $e->getMessage());
    }
    set_horizontal_left($pPHPExcel, "B$row");

    try {
        $pPHPExcel->getActiveSheet()->setCellValue("C$row", $data['birth']);
    } catch (PHPExcel_Exception $e) {
        exit("设置[C$row]单元格内容失败:" . $e->getMessage());
    }
    set_horizontal_left($pPHPExcel, "C$row");

    $row++; // 移到下一行
}

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


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


//========== 总结 ==========//
// 1、需要安装zip扩展,可到 https://pecl.php.net/package/zip 下载该扩展。

Copyright © 2024 码农人生. All Rights Reserved