1

バックグラウンド

さて、私はこの質問をしようとしましたが、それは恐ろしいセキュリティリークよりも早く閉鎖されました。PEARのSpreadsheetExcelWriterを使用してExcelファイルを作成したいと思います。私はこれを行う簡単な方法を無限に探し、ついに実際にその仕事をするかもしれないヘルパーを見つけました。

ただし、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を通過することさえできないということです。誰かが私がこれを機能させることができるようにファイルがどこに行く必要があるか教えてもらえますか?

4

3 に答える 3

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ライブラリのVendorフォルダにあります。あなたがすべきことは、PHPExcelコードをに入れることですApp/Vendor/次に、ベンダーパッケージをロードする方法を見てみましょう。次に、ヘルパーが入っApp/View/Helperているはずです。インスタンス化すると、ヘルパーが機能するはずです。また、OSに応じて、ベンダーのファイルのraed / write/excute権限を確認してください。

于 2013-02-13T08:43:41.363 に答える
4

私はプラグインの作成者ですが、最近、ベンダークラスが含まれ、それらが自動的に読み込まれるようにプラグインを変更しました。これで問題が解決することを願っています。

于 2014-01-05T21:25:21.683 に答える
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. 最初のステップでダウンロードしたPHPExcelzipファイルには多くの例があります(ここにもあります

私のコントローラーの完全な例(関数のみ)

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' );



    }

それが役に立てば幸い。

于 2016-05-06T12:46:05.347 に答える