phpspreadsheet: недопустимая ошибка расширения файла при использовании php mysql - PullRequest
0 голосов
/ 23 декабря 2018

Я использую phpspreadsheet для создания файлов Excel из моей базы данных в CodeIgniter.Хотя я пытаюсь открыть экспортированный файл Excel, он показывает мне ошибку:

Excel не может открыть файл 'abc.xlsx', поскольку формат файла или расширение недопустимо.Убедитесь, что файл не был поврежден и что расширение файла соответствует формату файла

Вот мой код:

модель

public function getAllMembersSearchByFamily($term)
{
    $this->db->select('*,tab_family.family_name');
    $this->db->from('tab_members');
    $this->db->join('tab_family', 'tab_family.family_id = tab_members.family_id');
    $this->db->where('tab_members.family_id', $term);
    $query = $this->db->get();
    return $query->result();
}

Контроллер:

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

require "vendor/autoload.php";
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;

class Applications extends CI_Controller {


public function generatefamilyreport()
{
    $output="";
    $term = trim($this->input->post('searchterm'));
    echo $term;
    $result = $this->Family_model->getAllMembersSearchByFamily($term);
    if(!empty($result))
    {
        $spreadsheet = new Spreadsheet();
        $sheet = $spreadsheet->getActiveSheet();
        $i = 1;
        foreach($result as $res)
        {
            $sheet->setCellValue('A'.$i, $res->name);
            $i++;
        }
        $writer = new Xlsx($spreadsheet);
        header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
        header('Content-Disposition: attachment;filename="users.xlsx"');
        header('Cache-Control: max-age=0');
        header('Expires: Fri, 11 Nov 2011 11:11:11 GMT');
        header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
        header('Cache-Control: cache, must-revalidate');
        header('Pragma: public');
        $writer->save('php://output');

    }
}   

}

view

  <?php 
    $attributes = array('class' => 'search-form', 'id' => 'generatereport');
    echo form_open('Applications/generatefamilyreport',$attributes);
    ?>
          <input type="text" name="searchterm" id="generatereporttext"  <?php if(isset($term) && !empty($term)) { ?> value="<?php echo $term;?>" <?php } ?>>
          <button class="btn btn-danger" style="margin-left: 15px;">Generate Report</button>
          <?php echo form_close(); ?>

Я впервые использую phpspreadsheet.Может кто-нибудь помочь мне исправить это ??Заранее спасибо!

Редактировать 1

Этот же код работает, когда я пытаюсь использовать встроенные данные, которые не используют данные из базы данных.Файл Excel экспортируется, и я могу открыть его.Вот отредактированный код контроллера для встроенных данных:

    public function generatefamilyreport()
{

    $spreadsheet = new Spreadsheet();
    $spreadsheet->getActiveSheet()->setTitle('Simple');
    $spreadsheet->setActiveSheetIndex(0)
            ->setCellValue('A1', 'This')
            ->setCellValue('B2', 'is')
            ->setCellValue('C1', 'a')
            ->setCellValue('D2', 'test.');
        header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
        header('Content-Disposition: attachment;filename="simple.xlsx"');
        header('Cache-Control: max-age=0');
        // If you're serving to IE 9, then the following may be needed
        header('Cache-Control: max-age=1');

        // If you're serving to IE over SSL, then the following may be needed
        header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
        header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); // always modified
        header('Cache-Control: cache, must-revalidate'); // HTTP/1.1
        header('Pragma: public'); // HTTP/1.0

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