个性化阅读
专注于IT技术分析

如何在Symfony 4中使用PHP创建Excel文件

本文概述

如今, 在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库本身的更多文档, 请不要忘记访问其文档。

编码愉快!

赞(0)
未经允许不得转载:srcmini » 如何在Symfony 4中使用PHP创建Excel文件

评论 抢沙发

评论前必须登录!