Как создать файл Excel из API? - PullRequest
0 голосов
/ 26 января 2020

Учитывая этот метод

public function exportExcel(Request $request){
    //dd($request);
    $spreadsheet = new \App\Reports\FormReport();
    $spreadsheet->exportReport($request);
    //return response()->json(['message'=>'Success']);
}

, где мой метод exportReport($request) body выглядит примерно так:

    $dateTimeNow = Carbon::now();

    $spreadsheet->getActiveSheet()
    ->setCellValue('A1', "This is a test")
    ->setCellValue('A2', "Hello World")
    ->setCellValue('A3', Date::PHPToExcel($dateTimeNow));

    header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');

    header('Content-Disposition: attachment;filename="Employee List.xlsx"');

    $writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
    $writer->save('php://output');
    exit;

и моя javascript функция:

function postRequest(){
    const url = window.location;
    const urlReq = url.origin+"/api/export_excel/exportexcel";
    const token = document.querySelector('meta[name="csrf-token"]').getAttribute('content');
    const list = document.getElementById('lt_employees').value;
    if(list){
      let obj = {
        employees : list,
      };

      console.log(obj);
      const request = new Request(urlReq, {
        method: 'POST',
        body: JSON.stringify(obj),
        headers: new Headers({
            'Content-Type': 'application/json',
            "X-CSRF-TOKEN": token
        })
      });

      //fetch(request).then(res => res.json()).then(res => console.log(res));
    }
  }

Моя проблема заключается в том, что при нажатии на кнопку, вызвавшую мой javascript метод postRequest(), не создается Excel. В чем может быть проблема здесь?

1 Ответ

0 голосов
/ 26 января 2020

Я не знаю язык, который вы используете, но я понимаю, что вы инициализируете объект Excel.Application, а затем пытаетесь использовать лист. Изначально Excel пуст, рабочих книг нет, и поэтому нет листов. Новая рабочая книга должна быть открыта или явно добавлена. Я прилагаю пример в VBA, я надеюсь, что это полезно

    Public Sub test()

        Dim App As Excel.Application
        Dim Wk As Workbook
        Dim Sh as WorkSheet

        Set App = New Excel.Application 'empty Excel Application
        Set Wk = App.Workbooks.Add ' add a new Workbook
        Set Sh = Wk.Sheets(1)
        ''something else
        Wk.Close 'close the Workbook
        App.Quit 'close Excel
        Set Sh = Nothing
        Set Wk = Nothing
        Set App = Nothing

    End Sub
...