2013-02-08 103 views
1

背景CakePHP中使用PHPExcel

嗯,我试着问这个问题,但它不是一个可怕的安全漏洞更快得到关闭。我想用PEAR的Spreadsheet Excel Writer编写一个excel文件。我Google无尽的一个简单的方法来做到这一点,最后found a helper可能实际上完成这项工作。

但它使用PHPExcel,所以我将不得不重写那个脚本,这是我最担心的。我只是不想现在就开始,然后仍然无法让它工作。

我也根据帮手的要求下载了PHPExcel

我有什么?

我有帮助,我已经添加了辅助控制器,像这样:网上

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

和我创建(复制和粘贴)脚本到视图,只是为了测试是否有用。

问题

什么是我得到一个错误:

Error: The application is trying to load a file from the PhpExcel plugin 

Error: Make sure your plugin PhpExcel is in the app\Plugin directory and was loaded 

我已经包含在APP/Vendor/PHPExcel.php文件夹中的文件(因为我读的地方,如果插件不遵循MVC框架,它需要去那里),但它仍然无法正常工作。也尝试过在插件目录和相同的错误。这是我第一次使用助手(希望不是最后一次),所以我对此很无能。

我还在APP/View/Helper/文件夹中包含了实际帮手PhpExcelHelper.php

而事情是我什至不能通过第1步。有人可以告诉我在哪里的文件需要去,让我可以得到这个工作?

+1

PEAR Spreadsheet Excel Writer!== PHPExcel – 2013-02-08 13:09:24

+1

似乎我删除了位置,我说我将脚本移到PHPExcel(因为它看起来像是更完整的软件包)。现在将添加它。道歉 – Albert 2013-02-08 13:11:11

+0

不幸的是,尽管我对PHPExcel本身有一些了解,但我对CakePHP如何集成一无所知,对不起,我无法帮助 – 2013-02-08 13:31:50

回答

6

如果你把在助手代码偷看你会发现有这个功能有叫loadEssentials

protected function loadEssentials() { 
    // load vendor class 
    App::import('Vendor', 'PHPExcel/Classes/PHPExcel'); 
    if (!class_exists('PHPExcel')) { 
     throw new CakeException('Vendor class PHPExcel not found!'); 
    } 
} 

现在你可以看到它看起来在为PHPExcel库卖方文件夹。你应该做的是把PHPExcel代码放在App/Vendor/。然后看看how to load vendor packages。然后帮手应该在App/View/Helper,当你瞬间它应该工作。还要检查Vendor中文件的raed/write/excute权限,具体取决于您的操作系统。

+0

我做了上述所有的几次,并最终双重检查一切后意识到我的文件名不符合App :: import语句的情况。 – Albert 2013-02-13 09:05:04

4

我是插件的作者,最近我对它进行了更改,以便它包含供应商类并自动加载它们。希望这能解决你的问题。

4

对于那些想直接将PHPExcel整合到CakePHP(2.x)中的人,这就是我所做的,我把它放在App/Vendor文件夹中。

  1. 转到https://github.com/PHPOffice/PHPExcel并下载整个zip文件。主要的核心文件夹是“类”。这是我们将要使用的。
  2. 将文件夹'Classes'放入您的Cakephp文件夹'APP/Vendor/PHPExcel'中。
  3. 将此行导入控制器顶部:App::import('Vendor', 'PHPExcel', array('file' => 'PHPExcel/Classes/PHPExcel.php'));。请注意“PHPExcel.php”文件的位置,并确保它的存在在你的CakePHP的文件夹
  4. 现在,您可以用下面这行访问对象:$objPHPExcel = new PHPExcel();
  5. 有一个在PHPExcel很多例子您在第一步中下载的zip文件(also found here

。在我的控制器

完整的示例(只有函数)

public function testxls() { 

    $folderToSaveXls = '/var/www/html'; 

    $objPHPExcel = new PHPExcel(); 

    $objPHPExcel->getProperties()->setCreator("Maarten Balliauw") 
         ->setLastModifiedBy("Maarten Balliauw") 
         ->setTitle("PHPExcel Test Document") 
         ->setSubject("PHPExcel Test Document") 
         ->setDescription("Test document for PHPExcel, generated using PHP classes.") 
         ->setKeywords("office PHPExcel php") 
         ->setCategory("Test result file"); 

    $objPHPExcel->setActiveSheetIndex(0) 
     ->setCellValue('A1', 'Hello') 
     ->setCellValue('B2', 'world!') 
     ->setCellValue('C1', 'Hello') 
     ->setCellValue('D2', 'world!'); 

    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); 
    $objWriter->save($folderToSaveXls . '/test.xls'); 



    } 

希望它有帮助。