我需要生成一个excel文件(xls),并在生成后触发下载。我在documentation中找到了这个例子。
<?php
require 'vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet->setCellValue('A1', 'Hello World !');
$writer = new Xlsx($spreadsheet);
$writer->save('hello world.xlsx');
它展示了如何创建一个excel文件并将其保存在服务器上。我如何将结果提供给客户端并“强迫”他下载它?我需要以某种方式获得$writer
的数据。
我目前正在解决它没有PhpSpreadsheet:
// Excel Export
$filename = 'export_'.date('d-m-y').'.xls';
$filename = $validator->removeWhitespace($filename);
header('Content-type: application/ms-excel');
header('Content-Disposition: attachment; filename='.$filename);
exit($response["output"]); // <-- contains excel file content
但是它不能与我的分隔符(分号)一起工作。分号没有得到解释,所有内容都被写进了一列。
如果我将其导出为.csv,那么它可以工作。但我需要它作为.xls或.xlsx
7条答案
按热度按时间gr8qqesn1#
这就是我用PhpSpreadsheet创建电子表格并直接输出到php://output以供下载所用的代码。
w6mmgewl2#
我遇到了同样的问题,并在这里找到了解决方案:https://github.com/PHPOffice/PhpSpreadsheet/issues/217
我用
$writer->save('php://output');
结束了我的方法,然后又用exit()
结束了我的方法hxzsmxv23#
我的答案:PHP:
联森:
r7s23pms4#
我用一个变通方法解决了这个问题,我把文件暂时保存在服务器上,然后把内容加载到一个变量中,并把它作为下载文件,然后从服务器上删除这个文件。
lg40wkob5#
调用ob_end_clean()函数;就在$writer-〉保存(“php://output”)之前。
ibps3vxo6#
这对我很有效:
bzzcjhmw7#
如果你的文件下载失败,最好检查一下文件输出的顶部是否有多余的空格。如果你的PHP文件有空白的白线,而HTML没有问题,你的phpspreadsheet文件会有问题。花了很多时间试图修复这些问题,但问题是空格!