PhpSpreadsheet не запрашивает локальное сохранение - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть некоторые проблемы, связанные с этой библиотекой php, которая не работает так, как я хочу, я надеюсь, что вы можете помочь мне с этой.

Моя программа сначала вызывает сервис через ajax, который возвращает.json. Затем с данными .json мне нужно сохранить его в файле xls excel, для этого я использую другой ajax, который вызывает службу php для локального сохранения (generarExcel2.php)

Ниже приведеноjs / ajax часть кода в моем html, которая на самом деле работает нормально.

    $(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 я проверил, правильно ли он получает содержимое $ _POST через var_dump, но здесь возникает основная проблема.

Не могу предложить пользователю сохранить данные. У меня естьпробовал использовать писатель и с IOFactory, ни один не работает Вот код 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');и это сохраняет изменения ПРАВИЛЬНО на сервере.Если вы можете увидеть, что я не могу, я буду благодарен.Большое спасибо!

Еще одна вещь.Я проверил, что если я нажму на маршрут, который действительно работает, и ПОДСКАЗЫВАЕТ пользователя, но таким образом он не будет передавать или получать данные.

1 Ответ

0 голосов
/ 20 декабря 2018

"Невозможно принудительно загрузить при использовании AJAX."Нашел ответ на аналогичную проблему здесь: https://stackoverflow.com/a/10191727/10551975

В любом случае, я все еще думаю, что возможен обходной путь, который будет более чем желанным.Я оставлю это открытым еще на несколько дней, на всякий случай, если кто-то может помочь мне в дальнейшем, чтобы отдать ему должное.

Редактировать: в итоге я использовал пустую форму, в которую были загружены данные с помощью ajax, а затем использовал обычную отправку.кнопка.Не то, что я хотел, но отлично работает.

...