Как экспортировать данные в Excel и как загрузить файл PHPExcel в контроллер с помощью codeiginter? - PullRequest
0 голосов
/ 02 января 2019
I have written the code to export the data into an excel sheet, but the PHPExcel  libray is not loaded into the code.It shows some error while clicking the button"Export".

Ошибка: введите описание изображения здесь

 public function Arrear_Print(){

    $data['page'] = 'export-excel';
        $data['title'] = 'Export Excel data | TechArise';
        $data['startdate'] =$this->input->post('SDate');
        $data['enddate'] = $this->input->post('EDate');
                $this->load->model('Export');
        $data['PName'] = $this->Export->mobileList();
        // load view file for output
        //$this->load->view('header');
        $this->load->view('TipUp_Loan\Arrear_Print', $data);
       // $this->load->view('footer');
}
 public function createXLS() {
        // create file name
        $fileName = 'mobile-'.time().'.xlsx';  
        // load excel library
        $this->load->library('excel');
        $mobiledata = $this->model->Export->mobileList();
        $objPHPExcel = new PHPExcel();
        $objPHPExcel->setActiveSheetIndex(0);
        // set Header
       $objPHPExcel->getActiveSheet()->SetCellValue('A1', 'AcNo');
        $objPHPExcel->getActiveSheet()->SetCellValue('B1', 'Mode');
        $objPHPExcel->getActiveSheet()->SetCellValue('C1', 'Party Name');
        $objPHPExcel->getActiveSheet()->SetCellValue('D1', 'Loan Date');
        $objPHPExcel->getActiveSheet()->SetCellValue('E1', 'Loan Amt');  
        $objPHPExcel->getActiveSheet()->SetCellValue('F1', 'Bal.Amt'); 
        $objPHPExcel->getActiveSheet()->SetCellValue('G1', 'Coll.Amt');  
        $objPHPExcel->getActiveSheet()->SetCellValue('H1', 'Rec.Amt');  
        $objPHPExcel->getActiveSheet()->SetCellValue('I1', 'Phone.No');
        // set Row
        $rowCount = 2;
        foreach ($mobiledata as $element) 
        {
            $objPHPExcel->getActiveSheet()->SetCellValue('A' . $rowCount, $element['TAcNo']);
            $objPHPExcel->getActiveSheet()->SetCellValue('B' . $rowCount, $element['TMode']);
            $objPHPExcel->getActiveSheet()->SetCellValue('C' . $rowCount, $element['TName']);
            $objPHPExcel->getActiveSheet()->SetCellValue('D' . $rowCount, $element['TDate']);
            $objPHPExcel->getActiveSheet()->SetCellValue('E' . $rowCount, $element['TAmt']);
            $objPHPExcel->getActiveSheet()->SetCellValue('F' . $rowCount, $element['total_sum']);
            $objPHPExcel->getActiveSheet()->SetCellValue('G' . $rowCount, $element['RLAmt']);
            $objPHPExcel->getActiveSheet()->SetCellValue('H' . $rowCount, $element['']);
            $objPHPExcel->getActiveSheet()->SetCellValue('I' . $rowCount, $element['Phone']);
            $rowCount++;
        }

        $objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);
        $objWriter->save($fileName);
        // download file
        header("Content-Type: application/vnd.ms-excel");
         redirect(site_url().$fileName);              
    }

Это код контроллера:

 <?php

if (!defined('BASEPATH'))
exit('No direct script access allowed');


    class Export extends CI_Model {
    // get mobiles list
    public function mobileList() {

        $data['startdate'] =$this->input->post('SDate');
            $data['enddate'] = $this->input->post('EDate');
            $PName  = $this->input->post('TName');
            $SDate  = $this->input->post('SDate');
            $EDate  = $this->input->post('EDate');

            if($PName = $this->input->post('TName')){


            $query = $this->db->query("SELECT `TAcNo`,`TMode`,`TDate`,`TAmt`,`TName`, COALESCE(SUM(`RLAmt`) ,0) AS `RLAmt`,`Phone` FROM `tipup_payment`  LEFT OUTER JOIN `tipup_receipt` ON `tipup_receipt`.`TRAcNo` = `tipup_payment`.`TAcNo`  AND `TDate` >= '$SDate' AND `TDate` <= '$EDate' LEFT OUTER JOIN `parmaster` ON `parmaster`.`PName` = `tipup_payment`.`TName`  WHERE TName = '$PName' GROUP BY `TAcNo`ORDER BY `TAcNo` ASC");
               return $query->result_array(); 


            //$data['PName']=$query->result_array();
         //$this->load->view('TipUp_Loan\Arrear_Print',$data,FALSE);
        }

        else {
            $query = $this->db->query("SELECT `TAcNo`,`TMode`,`TDate`,`TAmt`,`TName`, COALESCE(SUM(`RLAmt`) ,0) AS `RLAmt`,`Phone` FROM `tipup_payment` LEFT OUTER JOIN `tipup_receipt` ON `tipup_receipt`.`TRAcNo` = `tipup_payment`.`TAcNo`  AND `TDate` >= '$SDate' AND `TDate` <= '$EDate' LEFT OUTER JOIN `parmaster` ON `parmaster`.`PName` = `tipup_payment`.`TName`  GROUP BY `TAcNo` ORDER BY `TAcNo` ASC");
            return $query->result_array();   
            //$data['PName']=$query->result_array();
          //$this->load->view('TipUp_Loan\Arrear_Print',$data,FALSE);
        }


    }
    }
    ?>

Это код модели:

введите описание изображения здесь Это входная страница просмотра .... При задании даты и даты в текстовое поле. Получите данные между этой датой и правильно отобразите их на странице просмотра. введите описание изображения здесь

Это извлеченные данные, которые отображаются на странице просмотра при нажатии кнопки «Экспорт». Появляется ошибка, что я никогда не загружал изображение.

Я скачал файл библиотеки phpexcel на веб-сайте codeiginter.

Это ссылка .... введите описание ссылки здесь

Пожалуйста, помогите мне решить эту проблему.

1 Ответ

0 голосов
/ 02 января 2019

Есть много способов решить вашу проблему. Все сводится к тому, как (и где) ваши файлы PHPExcel размещаются и вызываются из сообщения об ошибке, мы можем предположить, что PHP ищет файлы PHPExcel в другом месте, чем они на самом деле.

YMMV, но это моя установка.

Чтобы вывести файл XLS, я получаю массивы данных из моей модели (всегда используйте return $query->result_array(); вместо return $query->result(); в вашей модели, если вы не хотите преобразовать возвращенный объект в массив позже) и выполните:

    $this->excel->setActiveSheetIndex(0);
    $this->excel->getActiveSheet()->setTitle($report);

    $titles = array_keys($data[0]);
    $this->excel->getActiveSheet()->fromArray($titles, NULL, 'A1');
    $this->excel->getActiveSheet()->fromArray($data, NULL, 'A2');

    $filename='output.xls';

    header('Content-Type: application/vnd.ms-excel');
    header('Content-Disposition: attachment;filename="'.$filename.'"');
    header('Cache-Control: max-age=0');

    $objWriter = PHPExcel_IOFactory::createWriter($this->excel, 'Excel5');
    $objWriter->save('php://output');

Обратите внимание, что я звоню $this->excel из application/libraries/Excel.php, где живет этот код:

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

require_once APPPATH."/third_party/phpexcel/PHPExcel.php";

class Excel extends PHPExcel {
    public function __construct() {
        parent::__construct();
    }
}
?>

Основные файлы PHPExcel, как вы можете видеть из require, расположенного в application/third_party/phpexcel/PHPExcel.php (всегда не забывайте соблюдать регистр, так как маршруты чувствительны к регистру). На том же уровне, где находится PHPExcel.php, я разместил каталог с основными файлами PHPExcel - включая autoloader.php - с именем PHPExcel.

Это довольно просто и отлично работает для меня в нескольких проектах с использованием CI 3.1.x

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...