2013-02-08 112 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'); 



    } 

希望它有幫助。