Laravel Excel 包的五个隐藏功能

发表于 作者

Five Hidden Features of the Laravel Excel Package image

Laravel Excel 包 最近迎来了 3.0 版本,带来了一些新功能,这些新功能有助于简化高级用例,并且易于使用。让我们探索一些您可能不了解的隐藏功能,这些功能使 Laravel Excel 成为处理 Excel 工作的最佳选择。

  1. 从 HTML/Blade 中导出

假设您已经有一个带有 HTML 表格的列表页面

以下是 Blade 代码 - **resources/views/customers/table.blade.php**

<table class="table">
<thead>
<tr>
<th></th>
<th>First name</th>
<th>Last name</th>
<th>Email</th>
<th>Created at</th>
<th>Updated at</th>
</tr>
</thead>
<tbody>
@foreach ($customers as $customer)
<tr>
<td>{{ $customer->id }}</td>
<td>{{ $customer->first_name }}</td>
<td>{{ $customer->last_name }}</td>
<td>{{ $customer->email }}</td>
<td>{{ $customer->created_at }}</td>
<td>{{ $customer->updated_at }}</td>
</tr>
@endforeach
</tbody>
</table>

您可以重复使用它将相同的表格导出到 Excel。

**步骤 1.** 生成导出类

php artisan make:export CustomersFromView --model=Customer

**步骤 2.** 使用 **FromView** 执行操作。

namespace App\Exports;
 
use App\Customer;
use Illuminate\Contracts\View\View;
use Maatwebsite\Excel\Concerns\FromView;
 
class CustomersExportView implements FromView
{
public function view(): View
{
return view('customers.table', [
'customers' => Customer::orderBy('id', 'desc')->take(100)->get()
]);
}
}

以下是生成的 Excel 文件

**注意:** 您只能导出 HTML 表格,不能导出任何布局标签,例如 **html、body、div** 等。


  1. 导出到 PDF、HTML 等

虽然该包名为 Laravel Excel,但它提供了导出到更多格式的功能。使用起来非常简单,只需在类中添加一个参数

return Excel::download(new CustomersExport(), 'customers.xlsx', 'Html');

没错,就是 HTML。以下是其外观

我知道样式不多。以下是源代码

不仅如此,它还允许导出到 PDF,您甚至可以从三个库中选择一个。同样,您只需将格式作为最后一个参数指定 - 以下是 其文档中的截图

**注意:** 您还需要通过 composer 安装所选的 PDF 包,例如

composer require dompdf/dompdf

以下是 PDF 的外观


  1. 随意格式化单元格

Laravel Excel 包有一个强大的“父包” - PhpSpreadsheet。因此它采用了所有底层功能,包括以各种方式格式化单元格。

以下是在 Laravel Export 类中使用它的方法,例如 **app/Exports/CustomersExportStyling.php**

**步骤 1.** 在头部使用适当的类。

use Maatwebsite\Excel\Concerns\WithEvents;
use Maatwebsite\Excel\Events\AfterSheet;

**步骤 2.** 在 **implements** 部分使用 **WithEvents**。

class CustomersExportStyling implements FromCollection, WithEvents
{
// ...

**步骤 3.** 创建 **registerEvents()** 方法并使用 **AfterSheet** 事件。

/**
* @return array
*/
public function registerEvents(): array
{
return [
AfterSheet::class => function(AfterSheet $event) {
// ... HERE YOU CAN DO ANY FORMATTING
},
];
}

以下是一个示例

/**
* @return array
*/
public function registerEvents(): array
{
return [
AfterSheet::class => function(AfterSheet $event) {
// All headers - set font size to 14
$cellRange = 'A1:W1';
$event->sheet->getDelegate()->getStyle($cellRange)->getFont()->setSize(14);
 
// Apply array of styles to B2:G8 cell range
$styleArray = [
'borders' => [
'outline' => [
'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THICK,
'color' => ['argb' => 'FFFF0000'],
]
]
];
$event->sheet->getDelegate()->getStyle('B2:G8')->applyFromArray($styleArray);
 
// Set first row to height 20
$event->sheet->getDelegate()->getRowDimension(1)->setRowHeight(20);
 
// Set A1:D4 range to wrap text in cells
$event->sheet->getDelegate()->getStyle('A1:D4')
->getAlignment()->setWrapText(true);
},
];
}

这些“随机”演示样式示例的结果如下所示

您可以在 PhpSpreadsheet 文档的“食谱”页面 中找到所有这些示例以及更多示例。


  1. 模型中的隐藏字段

假设我们已经用默认的 Laravel 5.7 **users** 表进行了填充

让我们尝试使用一个简单的 **FromCollection** 类导出它

class UsersExport implements FromCollection
{
public function collection()
{
return User::all();
}
}

在生成的 Excel 中,您会发现一些字段丢失了:**password** 和 **remember_token**

这是因为 **app/User.php** 属性

class User extends Authenticatable
{
// ...
 
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
}

因此,这些字段默认情况下是隐藏的,但这向我们展示了 Laravel Excel 包的行为 - 如果您想保护某些字段免于导出,您可以在模型中直接进行操作。


  1. 公式

出于某种原因,官方 Laravel Excel 包文档没有提及任何关于公式的内容。但使用 Excel 的关键就在于此!

幸运的是,在导出的文件中写入公式非常简单。我们需要像在 Excel 中一样设置单元格值,例如 **=A2+1** 或 **SUM(A1:A10)**。

其中一种方法是使用 **WithMapping**

use App\Customer;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithMapping;
 
class CustomersExportFormulas implements FromCollection, WithMapping
{
public function collection()
{
return Customer::all();
}
 
/**
* @var Customer $customer
* @return array
*/
public function map($customer): array
{
return [
$customer->id,
'=A2+1',
$customer->first_name,
$customer->last_name,
$customer->email,
];
}
}

因此,这只是 Laravel Excel 的五个鲜为人知的特性。如果您想了解更多信息,我有一个独特的在线课程,名为 Laravel 中的 Excel 导出/导入,快去看看吧!

PovilasKorop photo

Laravel Daily 的课程和教程创建者

归档于
Cube

Laravel 新闻通讯

加入 40,000 多名其他开发者,绝不错过新技巧、教程等。

Laravel Forge logo

Laravel Forge

轻松创建和管理您的服务器,并在几秒钟内部署您的 Laravel 应用程序。

Laravel Forge
Tinkerwell logo

Tinkerwell

Laravel 开发人员必备的代码运行器。使用 AI、自动完成和本地和生产环境的即时反馈进行调试。

Tinkerwell
No Compromises logo

没有妥协

来自 No Compromises 播客的两名经验丰富的开发者 Joel 和 Aaron 现在可以为您的 Laravel 项目提供服务。 ⬧ 固定费率为 7,500 美元/月。 ⬧ 没有冗长的销售流程。 ⬧ 没有合同。 ⬧ 100% 返款保证。

没有妥协
Kirschbaum logo

Kirschbaum

提供创新和稳定性,确保您的 Web 应用程序取得成功。

Kirschbaum
Shift logo

Shift

正在运行旧版本的 Laravel?即时、自动化的 Laravel 升级和代码现代化,以保持您的应用程序更新。

Shift
Bacancy logo

Bacancy

仅需每月 2,500 美元,即可为您的项目配备一名拥有 4-6 年经验的经验丰富的 Laravel 开发人员。获得 160 小时的专业知识和 15 天的无风险试用。立即安排电话会议!

Bacancy
Lucky Media logo

Lucky Media

立即获得 Lucky - Laravel 开发的理想选择,拥有十多年的经验!

Lucky Media
Lunar: Laravel E-Commerce logo

Lunar:Laravel 电子商务

Laravel 的电子商务。一个开源包,将现代无头电子商务功能的力量带到 Laravel。

Lunar:Laravel 电子商务
LaraJobs logo

LaraJobs

官方 Laravel 工作板

LaraJobs
SaaSykit: Laravel SaaS Starter Kit logo

SaaSykit:Laravel SaaS 启动工具包

SaaSykit 是一个 Laravel SaaS 启动工具包,包含运行现代 SaaS 所需的所有功能。支付、漂亮的结账、管理面板、用户仪表板、身份验证、现成的组件、统计数据、博客、文档等等。

SaaSykit:Laravel SaaS 启动工具包
Rector logo

Rector

您无缝升级 Laravel、降低成本和加速创新的合作伙伴,帮助企业取得成功。

Rector
MongoDB logo

MongoDB

通过 MongoDB 和 Laravel 的强大集成来增强您的 PHP 应用程序,使开发人员能够轻松高效地构建应用程序。支持事务、搜索、分析和移动用例,同时使用熟悉的 Eloquent API。了解灵活的现代数据库 MongoDB 如何改变您的 Laravel 应用程序。

MongoDB
Maska is a Simple Zero-dependency Input Mask Library image

Maska 是一个简单的零依赖输入掩码库

阅读文章
Add Swagger UI to Your Laravel Application image

在您的 Laravel 应用程序中添加 Swagger UI

阅读文章
Assert the Exact JSON Structure of a Response in Laravel 11.19 image

在 Laravel 11.19 中断言响应的精确 JSON 结构

阅读文章
Build SSH Apps with PHP and Laravel Prompts image

使用 PHP 和 Laravel Prompts 构建 SSH 应用程序

阅读文章
Building fast, fuzzy site search with Laravel and Typesense image

使用 Laravel 和 Typesense 构建快速、模糊的网站搜索

阅读文章
Add Comments to your Laravel Application with the Commenter Package image

使用 Commenter 包在您的 Laravel 应用程序中添加评论

阅读文章