传递给PHPExcel_IOFactory :: createWriter()的参数1必须是PHPExcel的

时间:2016-07-29 06:15:51

标签: cakephp phpexcel

我遇到了问题。我在PHPExcel使用cakephp2.x根据https://github.com/segy/PhpExcel

现在我加载了PHPExcel

public $helpers = array('PhpExcel');
public $components = array('PhpExcel');

我在控制器中这样做:

$this->PhpExcel->createWorksheet()->setDefaultFont('Calibri', 12);
$this->PhpExcel->getActiveSheet()->setTitle('SSUK New booking');

// define table cells
$table = array(
           array('label' => __('Student First Name')),
           array('label' => __('Student Last Name')),
           array('label' => __('Student Group')),
       );
$this->PhpExcel->addTableHeader($table, array('name' => 'Cambria', 'bold' => true));
$this->PhpExcel->addTableRow(array(
                        'abcd',
                        'qwerty',
                        'cts',
                      ));
$this->PhpExcel->addTableFooter();
$objWriter = PHPExcel_IOFactory::createWriter($this->PhpExcel, 'Excel5');
$excel_name = 'new_booking.xlsx';
$objWriter->save('img/excel/' . $excel_name);
exit();

一切正常,excel生成并保存到文件夹..但我收到了一些警告:

  

警告(4096):传递给PHPExcel_IOFactory :: createWriter()的参数1必须是PHPExcel的一个实例,   给出的PhpExcelComponent实例,调用   D:\ xampp \ htdocs \ SSUK \ app \ Controller \ ChildFormsController.php在线   2012年并定义了[APP \ Vendor \ PHPExcel \ IOFactory.php,第132行]

     

警告(4096):参数1传递给   PHPExcel_Writer_Excel5 :: __ construct()必须是PHPExcel的一个实例,   给出的PhpExcelComponent实例,调用   第141行的D:\ xampp \ htdocs \ SSUK \ app \ Vendor \ PHPExcel \ IOFactory.php和   定义[APP \ Vendor \ PHPExcel \ Writer \ Excel5.php,第106行]

     

警告(4096):参数1传递给   PHPExcel_Calculation :: getInstance()必须是PHPExcel的一个实例,   给出的PhpExcelComponent实例,调用   第123行的D:\ xampp \ htdocs \ SSUK \ app \ Vendor \ PHPExcel \ Writer \ Excel5.php   并定义[APP \ Vendor \ PHPExcel \ Calculation.php,第1762行]

     

警告(4096):参数1传递给   PHPExcel_Calculation :: getInstance()必须是PHPExcel的一个实例,   给出的PhpExcelComponent实例,调用   第124行的D:\ xampp \ htdocs \ SSUK \ app \ Vendor \ PHPExcel \ Writer \ Excel5.php   并定义[APP \ Vendor \ PHPExcel \ Calculation.php,第1762行]

     

警告(4096):参数1传递给   PHPExcel_Writer_Excel5_Workbook :: __ construct()必须是。的实例   PHPExcel,给出了PhpExcelComponent的实例,调用了   第134行的D:\ xampp \ htdocs \ SSUK \ app \ Vendor \ PHPExcel \ Writer \ Excel5.php   并定义[APP \ Vendor \ PHPExcel \ Writer \ Excel5 \ Workbook.php,第203行]

     

警告(4096):参数1传递给   PHPExcel_Calculation :: getInstance()必须是PHPExcel的一个实例,   给出的PhpExcelComponent实例,调用   第229行的D:\ xampp \ htdocs \ SSUK \ app \ Vendor \ PHPExcel \ Writer \ Excel5.php   并定义[APP \ Vendor \ PHPExcel \ Calculation.php,第1762行]

现在,如果我通过以下对象完成了它:

    $objPHPExcel = new PHPExcel();
    $objPHPExcel->createWorksheet()->setDefaultFont('Calibri', 12);
    $objPHPExcel->getActiveSheet()->setTitle('SSUK New booking');

    // define table cells
    $table = array(
              array('label' => __('Student First Name')),
              array('label' => __('Student Last Name')),
              array('label' => __('Student Group')),
             );
   $objPHPExcel->addTableHeader($table, array('name' => 'Cambria', 'bold' => true));
   $objPHPExcel->addTableRow(array(
                        'abcd',
                        'qwerty',
                        'cts',
                        ));
   $objPHPExcel->addTableFooter();
   $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
   $excel_name = 'new_booking.xlsx';
   $objWriter->save('img/excel/' . $excel_name);
   exit();

然后我收到了这个错误

  

致命错误

     

错误:调用未定义的方法PHPExcel :: createWorksheet()文件:   D:\ xampp \ htdocs \ SSUK \ app \ Controller \ ChildFormsController.php行:   1917年

     

注意:如果要自定义此错误消息,请创建   应用\视图\错误\ fatal_error.ctp

任何帮助都将受到赞赏。

1 个答案:

答案 0 :(得分:1)

您需要使用此行

$this->PhpExcel->getWriter('Excel5');
 $excel_name = 'new_booking.xlsx';
 $this->PhpExcel->save('img/excel/' . $excel_name);

而不是

$objWriter = PHPExcel_IOFactory::createWriter($this->PhpExcel, 'Excel5');
$excel_name = 'new_booking.xlsx';
$objWriter->save('img/excel/' . $excel_name);

在控制器中。