

<http://phpexcel.codeplex.com/> \---> からダウンロード（1.8.0）2015年11月23日現在  
（※2021年5月現在は <https://github.com/PHPOffice/PHPExcel> からダウンロードできます。）

■ダウンロードしたファイルを解凍し、Classesフォルダをphpexcelにリネーム。  
そして、phpexcelフォルダをapp/Vendor/以下に設置

■テンプレートファイルの準備と配置場所  
app/tmp/以下に、phpexcelフォルダを作成し  
その中に2007形式の空の【template.xlsx】配置する。

■Controllerの設定  
app/Controller/Users.php

[code]

    public function excel() {
        $this->layout = '';
        $data = $this->User->findById(15);
        $this->set('data', $data);
    }
    
[/code]

■View/Users/excel.ctp

[code]

    <?php
    App::import('Vendor', 'PHPExcel_Writer_IWriter', array('file' => 'phpexcel/PHPExcel/Writer/IWriter.php'));
    App::import('Vendor', 'PHPExcel_Writer_Abstract', array('file' => 'phpexcel/PHPExcel/Writer/Abstract.php'));
    App::import('Vendor', 'PHPExcel_Writer_Excel2007', array('file' => 'phpexcel/PHPExcel/Writer/Excel2007.php'));
    App::import('Vendor', 'PHPExcel_Reader_Excel2007', array('file' => 'phpexcel/PHPExcel/Reader/Excel2007.php'));
    
    $objReader = PHPExcel_IOFactory::createReader("Excel2007");
    
    $template = TMP . 'phpexcel/';
    $template_path = $template . 'template.xlsx';
    $PHPExcel = $objReader->load($template_path);
    
    $PHPExcel->setActiveSheetIndex(0);
    $sheet = $PHPExcel->getActiveSheet();
    
    $sheet->fromArray($data, null, 'A1');
    
    $filename = 'output.xlsx';
    $filename = mb_convert_encoding($filename, 'sjis', 'utf-8');
    
    header('Content-Disposition: attachment;filename="' . $filename . '"');
    $objWriter = new PHPExcel_Writer_Excel2007($PHPExcel);
    $objWriter->save('php://output');
    
[/code]

このようにすると、IDが15番のユーザーレコード情報が1行だけが  
Excelファイルとして出力されます。

MySQLのデータをすべて一覧で表示したいのでControllerで、

[code]

    $data = $this->User->find('all');
    
[/code]

とすると無効な拡張子のファイルとエラーになります。

View側で`<php debug($data); ?>`とすると配列できちんと一覧を取得しています。

`$sheet->fromArray($data, null, 'A1');` の書き方が何か  
違っているように思えます。

どなたか、ご存知の方、ご教授願えませんでしょうか。  
よろしくお願いします。


CC BY-SA 4.0
2015-11-23T04:23:17.940
19185
2021-05-02T11:54:10.803
2021-05-02T11:54:10.803
19110
13369
question
cakephp
PHPExcel1.8.0とCakePHP2.7.5でMySQLのデータを一覧表示できない。


こちらのblog :
[PHPExcelでの書き込みはfromArrayメソッドが便利](http://app2641.hatenablog.com/entry/2013/09/04/101046)
が参考になるでしょうか。  
特に foreach の部分ですね。

[code]

    foreach ($data as $value) {
        $sheet->setCellValueByColumnAndRow($col++, $row, $value);
    }
    
[/code]


CC BY-SA 3.0
2015-11-24T04:35:36.107
19231
2015-11-24T04:35:36.107
5778
19185
answer