我最近使用composer安装了PhpSpreadsheet,我使用的是php 7.4。
我试图打开一个Excel文件,改变一些细胞的价值观,然后保存文件(下载到客户端)与这些变化
经过一些研究和添加头接受.xlsx文件和自动下载工作,这工作完美,但只有一次.没有改变任何东西,第二天运行同样的东西,后台似乎什么也没有发生。看起来IOfactory::load可以读取文件,但自动下载不再发生。
我尝试通过JavaScript从客户端将加载的$spreadsheet记录到控制台,可以看到sheetml乱码。这告诉我加载器正在工作,编写器正在工作,也许下载的标题是错误的,但与众多在线示例相比,我看不出有什么问题。我大吃一惊,为什么它只能工作一次,现在不知道问题可能在哪里。
任何帮助弄清楚为什么这将工作,然后停止工作,而不改变任何东西将不胜感激。
excelCompleteExport.php:
require 'PHPSpreadsheet/vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load("NedbankBBCommTemplate_REMSYSTEM.xlsx");
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="result2.xlsx"');
set_error_handler (
function($errno, $errstr, $errfile, $errline) {
throw new ErrorException($errstr, $errno, 0, $errfile, $errline);
}
);
try
{
\PhpOffice\PhpSpreadsheet\Shared\File::setUseUploadTempDirectory(true);
$writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Xlsx');
$writer->save('php://output');
//echo "<script type='text/javascript'>console.log('done');</script>";
}
catch(Exception $e)
{
echo "<script type='text/javascript'>console.log('".$e->getMessage()."');</script>";
}
从JavaScript调用:
function ExpExcel()
{
$("#InvisElement").load("excelCompleteExport.php");
}
HTML按钮调用JavaScript函数:
<button id="ExpExcel" style="width: 200px;" class="navbtn" type="submit" onclick="ExpExcel(); return false;">Export to Excel</button>
3条答案
按热度按时间vfhzx4xs1#
自动下载主要受浏览器限制(防止恶意软件下载)。您可以尝试通过a link/按钮上的jQuery在新的Tab中打开生成的. xlsx文件。
qmelpv7a2#
f4t66c6m3#
不知道你是否已经解决了这个问题,但根据文档:
目前,所需的PHP最低版本是PHP 8.0。
https://phpspreadsheet.readthedocs.io/en/latest/