You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Laravel Excel制作美观表格并导入现有文件保存(Laravel 8.1.10)

Laravel 8 + Laravel Excel 3.1 操作现有Excel文件解决方案

核心思路

Laravel Excel 3.1 底层依赖 PhpSpreadsheet,不用局限于框架封装的方法,直接借助PhpSpreadsheet的API就能加载现有Excel文件,完成样式设置、数据填充后再保存回原文件(或指定路径),无需新建文件。

具体步骤

1. 确认依赖安装

确保Laravel Excel 3.1已正确安装,未安装的话执行以下命令:

composer require maatwebsite/excel:^3.1

2. 实操代码示例

以下是完整的业务实现代码,包含加载现有文件、设置订单/库存表格样式、填充数据、保存修改的全流程:

use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Style\Alignment;
use PhpOffice\PhpSpreadsheet\Style\Border;
use PhpOffice\PhpSpreadsheet\Style\Fill;

// 现有Excel模板文件路径(示例:storage/app下的template.xlsx)
$filePath = storage_path('app/template.xlsx');

// 1. 加载现有Excel文件
$spreadsheet = IOFactory::load($filePath);

// 2. 操作订单工作表(默认选中第一个工作表,也可按名称指定)
$orderSheet = $spreadsheet->getActiveSheet();
// 若要指定名为"订单表"的工作表:
// $orderSheet = $spreadsheet->getSheetByName('订单表');

// 填充订单数据
$orderData = [
    ['订单ID', '客户名称', '订单金额', '创建时间'],
    ['ORD-001', '张三', 1200.00, '2024-05-20'],
    ['ORD-002', '李四', 850.50, '2024-05-21'],
];
// 从A1单元格开始插入数据
$orderSheet->fromArray($orderData, null, 'A1');

// 设置订单表头样式:深色背景、白字加粗、居中对齐、带细边框
$headerStyle = $orderSheet->getStyle('A1:D1');
$headerStyle->getFont()->setBold(true)->getColor()->setRGB('FFFFFF');
$headerStyle->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setRGB('2C3E50');
$headerStyle->getAlignment()->setHorizontal(Alignment::HORIZONTAL_CENTER)->setVertical(Alignment::VERTICAL_CENTER);
$headerStyle->getBorders()->getAllBorders()->setBorderStyle(Border::BORDER_THIN)->getColor()->setRGB('000000');

// 设置订单数据区域样式:居中对齐、带细边框
$dataRange = 'A2:D' . count($orderData);
$dataStyle = $orderSheet->getStyle($dataRange);
$dataStyle->getAlignment()->setHorizontal(Alignment::HORIZONTAL_CENTER)->setVertical(Alignment::VERTICAL_CENTER);
$dataStyle->getBorders()->getAllBorders()->setBorderStyle(Border::BORDER_THIN)->getColor()->setRGB('000000');

// 自动调整列宽,适配内容
foreach(range('A', 'D') as $col) {
    $orderSheet->getColumnDimension($col)->setAutoSize(true);
}

// 3. 操作库存工作表(复用样式逻辑)
$inventorySheet = $spreadsheet->getSheetByName('库存表');
$inventoryData = [
    ['商品ID', '商品名称', '库存数量', '单价'],
    ['PROD-001', '笔记本电脑', 25, 4999.00],
    ['PROD-002', '无线鼠标', 120, 89.00],
];
$inventorySheet->fromArray($inventoryData, null, 'A1');

// 复制订单表的样式逻辑到库存表(省略重复代码,可封装成公共方法复用)
$inventoryHeaderStyle = $inventorySheet->getStyle('A1:D1');
$inventoryHeaderStyle->applyFromArray($headerStyle->getArrayStyle());
$inventoryDataStyle = $inventorySheet->getStyle('A2:D' . count($inventoryData));
$inventoryDataStyle->applyFromArray($dataStyle->getArrayStyle());
foreach(range('A', 'D') as $col) {
    $inventorySheet->getColumnDimension($col)->setAutoSize(true);
}

// 4. 保存修改后的文件
$writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
// 覆盖原文件
$writer->save($filePath);
// 如需保存到新路径:
// $writer->save(storage_path('app/updated_orders_inventory.xlsx'));

// 释放内存,避免溢出
$spreadsheet->disconnectWorksheets();
unset($spreadsheet);

3. 注意事项

  • 确保现有Excel文件路径正确,且服务器对该路径拥有读写权限;
  • 原文件的复杂样式(如合并单元格、公式)会被保留,仅需修改目标区域的样式即可;
  • Laravel Excel 3.1 已弃用Excel::load()方法,直接使用PhpSpreadsheet的IOFactory更灵活;
  • 若需多次复用该逻辑,可封装成服务类,抽离样式、加载保存等公共代码。

内容的提问来源于stack exchange,提问作者Marzanur Zarif

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 19:55:33