本文概述
如今, 在Web应用程序开发中创建excel文件是必须的, 作为开发人员, 你必须了解以你喜欢的语言创建它的可用新技术。自2015年以来, 最新的PHPExcel版本1.8.1已发布, 每个人都在官方存储库中收到一条消息, 该项目将不再维护且不再使用。
但是不用担心, 这不是像没有办法使用该库生成更多的excel文件。取而代之的是, 发布了具有相同名称的相同版本PHPOffice的新版本, 即新名称, 即PHPSpreadsheet库。该库PhpSpreadsheet是用纯PHP编写的库, 旨在提供一组类, 使你可以读取和写入不同的电子表格文件格式, 例如Excel和LibreOffice Calc。该库提供以下支持:
格式 | 阅读 | 写作 |
---|---|---|
打开文档格式/ OASIS(.ods) | ✓ | ✓ |
Office Open XML (.xlsx) Excel 2007 and above | ✓ | ✓ |
BIFF 8 (.xls) Excel 97 and above | ✓ | ✓ |
BIFF 5 (.xls) Excel 95 | ✓ | |
SpreadsheetML (.xml) Excel 2003 | ✓ | |
字母数字 | ✓ | |
的HTML | ✓ | ✓ |
西尔克 | ✓ | |
CSV | ✓ | ✓ |
PDF (using either the TCPDF, Dompdf or mPDF libraries, which need to be installed separately) | ✓ |
作为使用最新版本中所有内容的人, 我们不会教你如何使用旧库创建excel文件, 而是使用新库。在本文中, 我们将向你展示如何在基于Symfony 4的项目中安装该库以使用PHP创建Excel文件。
1.安装PHPSpreadsheet
建议使用composer来安装PHPExcel后继PHPSpreadsheet。在symfony 4项目的根目录中打开一个终端, 然后运行以下命令:
composer require phpoffice/phpspreadsheet
这会将phpoffice / phpspreadsheet软件包作为依赖项添加到你的Symfony 4项目中, 并将进行安装。有关这些方法的更多信息, 更多示例不了解Symfony 4, 而是excel本身, 请访问PHPSpreadsheet的Github官方存储库或此处的官方文档。
2.通过创建Excel文件
通常, 作为开发人员, 你将边做边学, 这意味着编写和运行一些代码!我们将向你展示一些你经常需要的传统示例, 这种情况是在磁盘上创建一个excel文件(在路径中保存一个excel文件)和一个流式响应(一个内联处置文件):
A.将excel文件写入本地目录
如果愿意在服务器磁盘中创建文件, 则可以使用直接写入磁盘的库的传统保存方法。只需提供要保存目录的绝对路径和文件名即可(请确保该目录存在并且你具有给定目录的写许可权):
<?php
namespace App\Controller;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
// Include PhpSpreadsheet required namespaces
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
class DefaultController extends Controller
{
public function index()
{
$spreadsheet = new Spreadsheet();
/* @var $sheet \PhpOffice\PhpSpreadsheet\Writer\Xlsx\Worksheet */
$sheet = $spreadsheet->getActiveSheet();
$sheet->setCellValue('A1', 'Hello World !');
$sheet->setTitle("My First Worksheet");
// Create your Office 2007 Excel (XLSX Format)
$writer = new Xlsx($spreadsheet);
// In this case, we want to write the file in the public directory
$publicDirectory = $this->get('kernel')->getProjectDir() . '/public';
// e.g /var/www/project/public/my_first_excel_symfony4.xlsx
$excelFilepath = $publicDirectory . '/my_first_excel_symfony4.xlsx';
// Create the file
$writer->save($excelFilepath);
// Return a text response to the browser saying that the excel was succesfully created
return new Response("Excel generated succesfully");
}
}
B.生成Excel文件响应(附件)
默认情况下, 使用PHP时, 响应逻辑会因所使用的框架或你自己编写的逻辑而有很大不同, 这就是为什么该库仅允许写入特定目录的原因。但是, 当你即时生成excel文件时, 这没有用, 因为你需要照顾好文件, 创建它们并删除它们。
如果遵循上述逻辑, 则生成excel文件可能会令人头疼, 因此最简单的方法是使用PHP在系统上生成一个临时文件, 然后将excel内容写入其中, 然后生成具有自定义名称的文件(临时文件将在一段时间后被系统删除)。要将文件作为附件返回, 我们将使用Symfony基本控制器的文件帮助器。此类包括一些用于常见控制器任务的辅助方法, 并提供对服务容器的直接访问。我们需要的辅助方法称为file, 以简化二进制文件的提供。使用file()助手的最简单方法是传递文件的下载路径。浏览器将强制下载此文件, 并将为其分配与原始文件相同的名称:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\ResponseHeaderBag;
// Include PhpSpreadsheet required namespaces
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
class DefaultController extends Controller
{
public function index()
{
$spreadsheet = new Spreadsheet();
/* @var $sheet \PhpOffice\PhpSpreadsheet\Writer\Xlsx\Worksheet */
$sheet = $spreadsheet->getActiveSheet();
$sheet->setCellValue('A1', 'Hello World !');
$sheet->setTitle("My First Worksheet");
// Create your Office 2007 Excel (XLSX Format)
$writer = new Xlsx($spreadsheet);
// Create a Temporary file in the system
$fileName = 'my_first_excel_symfony4.xlsx';
$temp_file = tempnam(sys_get_temp_dir(), $fileName);
// Create the excel file in the tmp directory of the system
$writer->save($temp_file);
// Return the excel file as an attachment
return $this->file($temp_file, $fileName, ResponseHeaderBag::DISPOSITION_INLINE);
}
}
请注意, 生成的excel文件非常简单, 我们只写了一个单元格, 但是本文重点介绍了如何使用symfony 4控制器生成, 保存和下载该文件。有关PHPSpreadsheet库本身的更多文档, 请不要忘记访问其文档。
编码愉快!
评论前必须登录!
注册