gpt4 book ai didi

PhpSpreadsheet - 下载文件而不是保存文件

转载 作者:行者123 更新时间:2023-12-03 11:23:13 39 4
gpt4 key购买 nike

我需要生成一个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

但它不适用于我的分隔符(分号)。分号没有得到解释,所有内容都被写入一列。

enter image description here

如果我将其导出为 .csv,则它可以工作。但我需要它作为 .xls 或 .xlsx

最佳答案

use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;

class DownloadExcel
{
public static function createExcel(array $data, array $headers = [],
$fileName = 'data.xlsx')
{
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();

for ($i = 0, $l = sizeof($headers); $i < $l; $i++) {
$sheet->setCellValueByColumnAndRow($i + 1, 1, $headers[$i]);
}

for ($i = 0, $l = sizeof($data); $i < $l; $i++) { // row $i
$j = 0;
foreach ($data[$i] as $k => $v) { // column $j
$sheet->setCellValueByColumnAndRow($j + 1, ($i + 1 + 1), $v);
$j++;
}
}

$writer = new Xlsx($spreadsheet);
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment; filename="'. urlencode($fileName).'"');
$writer->save('php://output');
}

}
这是我用来创建带有 PhpSpreadsheet 的电子表格并直接输出到 php://output 以供下载的内容。

关于PhpSpreadsheet - 下载文件而不是保存文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58971049/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com