【问题标题】:Using PHPExcel in CakePHP在 CakePHP 中使用 PHPExcel
【发布时间】:2016-05-06 20:58:31
【问题描述】:

背景

好吧,我试图问这个问题,但它被关闭的速度比可怕的安全漏洞要快。我想使用 PEAR 的电子表格 Excel Writer 编写一个 excel 文件。我一直在谷歌上寻找一种简单的方法来做到这一点,最后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 步。有人可以告诉我文件需要放在哪里以便我可以让它工作吗?

【问题讨论】:

  • PEAR 电子表格 Excel 编写器 !== PHPExcel
  • 似乎我删除了我说我将脚本移动到 PHPExcel 的位置(因为它看起来像是更完整的包)。现在将添加它。道歉
  • 很遗憾,虽然我对 PHPExcel 本身有点了解,但我对它如何集成到 CakePHP 中却一无所知,抱歉我帮不上忙
  • 不用担心。感谢您指出我的问题中的缺陷。不知道我在想什么。 :)

标签: php phpexcel cakephp-2.2


【解决方案1】:

如果您查看 Helper 代码,您会注意到那里有一个名为 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!');
    }
}

现在您可以看到它在 Vendor 文件夹中查找 PHPExcel 库。你应该做的是把 PHPExcel 代码放在App/Vendor/ 中。然后看看how to load vendor packages。那么 Helper 应该在 App/View/Helper 中,当你实例化它时它应该可以工作。还要根据您的操作系统检查 Vendor 中文件的 raed/write/excute 权限。

【讨论】:

  • 上述方法我做了几次,最后仔细检查后发现我的文件名与 App::import 语句的大小写不符。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    对于那些想直接将 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' );
    
    
    
        }
    

    .

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多