本文概述
- 1.安装PHPSpreadsheet
- 2.通过创建Excel文件
但是不用担心, 这不是像没有办法使用该库生成更多的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) | ? |
1.安装PHPSpreadsheet【如何在Symfony 4中使用PHP创建Excel文件】建议使用composer来安装PHPExcel后继PHPSpreadsheet。在symfony 4项目的根目录中打开一个终端, 然后运行以下命令:
composer require phpoffice/phpspreadsheet
这会将phpoffice / phpspreadsheet软件包作为依赖项添加到你的Symfony 4项目中, 并将进行安装。有关这些方法的更多信息, 更多示例不了解Symfony 4, 而是excel本身, 请访问PHPSpreadsheet的Github官方存储库或此处的官方文档。
2.通过创建Excel文件通常, 作为开发人员, 你将边做边学, 这意味着编写和运行一些代码!我们将向你展示一些你经常需要的传统示例, 这种情况是在磁盘上创建一个excel文件(在路径中保存一个excel文件)和一个流式响应(一个内联处置文件):
A.将excel文件写入本地目录
如果愿意在服务器磁盘中创建文件, 则可以使用直接写入磁盘的库的传统保存方法。只需提供要保存目录的绝对路径和文件名即可(请确保该目录存在并且你具有给定目录的写许可权):
<
?phpnamespace App\Controller;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
// Include PhpSpreadsheet required namespacesuse 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 createdreturn new Response("Excel generated succesfully");
}}
B.生成Excel文件响应(附件)
默认情况下, 使用PHP时, 响应逻辑会因所使用的框架或你自己编写的逻辑而有很大不同, 这就是为什么该库仅允许写入特定目录的原因。但是, 当你即时生成excel文件时, 这没有用, 因为你需要照顾好文件, 创建它们并删除它们。
如果遵循上述逻辑, 则生成excel文件可能会令人头疼, 因此最简单的方法是使用PHP在系统上生成一个临时文件, 然后将excel内容写入其中, 然后生成具有自定义名称的文件(临时文件将在一段时间后被系统删除)。要将文件作为附件返回, 我们将使用Symfony基本控制器的文件帮助器。此类包括一些用于常见控制器任务的辅助方法, 并提供对服务容器的直接访问。我们需要的辅助方法称为file, 以简化二进制文件的提供。使用file()助手的最简单方法是传递文件的下载路径。浏览器将强制下载此文件, 并将为其分配与原始文件相同的名称:
<
?phpnamespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\ResponseHeaderBag;
// Include PhpSpreadsheet required namespacesuse 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 attachmentreturn $this->
file($temp_file, $fileName, ResponseHeaderBag::DISPOSITION_INLINE);
}}
请注意, 生成的excel文件非常简单, 我们只写了一个单元格, 但是本文重点介绍了如何使用symfony 4控制器生成, 保存和下载该文件。有关PHPSpreadsheet库本身的更多文档, 请不要忘记访问其文档。
编码愉快!
推荐阅读
- 如何在不检出整个目录的情况下从子版本库中读取/提取文件的内容
- android上的nullpointer异常[重复]
- 我在我的android应用程序类中有错误我正在检查auth!= null但仍然在if if语句中()
- Android studio错误(java.lang.NullPointerException [重复])
- 尝试调用虚方法'void android.view.View.setOnClickListener [duplicate]
- 在android [duplicate]中运行时检查权限时获取NullPointerException
- safari app extensions(从swift后台进程向所有选项卡广播消息)
- Android findViewById空指针[重复]
- 从Safari打开相机APP