PhpSpreadsheet 不提示本地保存
PhpSpreadsheet not prompting local save
我遇到了一些关于这个 php 库的问题,它不能正常工作,我希望你能帮我解决这个问题。
我的程序首先通过 ajax 调用服务 returns a .json.Then with given.json 我需要将其保存在 xls excel文件,为此我使用另一个 ajax 调用 php 服务将其保存在本地 (generarExcel2.php)
下面是我 html 中代码的 js/ajax 部分,它实际上工作正常。
$(document).ready(function () {
var exceljsondatos;
var path ="{{urlSf}}";
$.ajax({
type: "POST",
url: path,
dataType: 'json',
success: function (data) {
exceljsondatos = data;
$('#genExcel').click(function () {
$.ajax({
type: "POST",
url: "generarExcel2.php",
data: exceljsondatos,
success: function (resultado) {
$('#resp').html(" Function call successful"); }
});//End exel ajax call
});//End click event
}//End of success
});//End ajax data call
}); //End of document ready
这在我的 html 上显示了正确的消息,所以似乎在这方面有效。
在我的 php 上,我检查了它是否通过 var_dump 正确接收了 $_POST 内容,但主要问题来了。
我无法提示用户保存数据。
我试过使用 writer 和 IOFactory,none 有效
这是 php 代码,您可以看一下。
<?php
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\IOFactory;//Option1
//use PhpOffice\PhpSpreadsheet\Writer\Xls;//Option2
$filename="Excel_jano_test";
$spreadsheet = new Spreadsheet();
$excel_writer = IOFactory::createWriter($spreadsheet, 'Xls');//Option1
//$excel_writer = new Xls($spreadsheet); //Option2
$activeSheet = $spreadsheet->getActiveSheet();
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="'. $filename .'.xls"');
header('Cache-Control: max-age=0');
$activeSheet->setCellValue('A1' , 'NUM.SOLICITUD');//example for dummy
$excel_writer->save('php://output');//THIS SHOULD PROMPT USER
我尝试将最后一行更改为 $excel_writer->save('otherfile.xls');并将更改正确保存在服务器上。
如果您能看到我看不到的东西,我将不胜感激。非常感谢!
还有一件事。我已经检查过,如果我点击实际工作和 PROMPTS 用户等路线,但这样它就不会传递或接收数据。
"It's not possible to force downloading when using AJAX."
在这里找到类似问题的答案:
无论如何,我仍然认为可能有一个非常受欢迎的解决方法。我会再打开几天,以防万一有人可以帮助我进一步信任他。
编辑:我最终使用了一个空表单,其中加载了 ajax 数据,然后使用常规提交按钮。不是我想要的,但效果很好。
我遇到了一些关于这个 php 库的问题,它不能正常工作,我希望你能帮我解决这个问题。
我的程序首先通过 ajax 调用服务 returns a .json.Then with given.json 我需要将其保存在 xls excel文件,为此我使用另一个 ajax 调用 php 服务将其保存在本地 (generarExcel2.php)
下面是我 html 中代码的 js/ajax 部分,它实际上工作正常。
$(document).ready(function () {
var exceljsondatos;
var path ="{{urlSf}}";
$.ajax({
type: "POST",
url: path,
dataType: 'json',
success: function (data) {
exceljsondatos = data;
$('#genExcel').click(function () {
$.ajax({
type: "POST",
url: "generarExcel2.php",
data: exceljsondatos,
success: function (resultado) {
$('#resp').html(" Function call successful"); }
});//End exel ajax call
});//End click event
}//End of success
});//End ajax data call
}); //End of document ready
这在我的 html 上显示了正确的消息,所以似乎在这方面有效。 在我的 php 上,我检查了它是否通过 var_dump 正确接收了 $_POST 内容,但主要问题来了。
我无法提示用户保存数据。 我试过使用 writer 和 IOFactory,none 有效 这是 php 代码,您可以看一下。
<?php
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\IOFactory;//Option1
//use PhpOffice\PhpSpreadsheet\Writer\Xls;//Option2
$filename="Excel_jano_test";
$spreadsheet = new Spreadsheet();
$excel_writer = IOFactory::createWriter($spreadsheet, 'Xls');//Option1
//$excel_writer = new Xls($spreadsheet); //Option2
$activeSheet = $spreadsheet->getActiveSheet();
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="'. $filename .'.xls"');
header('Cache-Control: max-age=0');
$activeSheet->setCellValue('A1' , 'NUM.SOLICITUD');//example for dummy
$excel_writer->save('php://output');//THIS SHOULD PROMPT USER
我尝试将最后一行更改为 $excel_writer->save('otherfile.xls');并将更改正确保存在服务器上。 如果您能看到我看不到的东西,我将不胜感激。非常感谢!
还有一件事。我已经检查过,如果我点击实际工作和 PROMPTS 用户等路线,但这样它就不会传递或接收数据。
"It's not possible to force downloading when using AJAX." 在这里找到类似问题的答案:
无论如何,我仍然认为可能有一个非常受欢迎的解决方法。我会再打开几天,以防万一有人可以帮助我进一步信任他。
编辑:我最终使用了一个空表单,其中加载了 ajax 数据,然后使用常规提交按钮。不是我想要的,但效果很好。