ThinkPHP 3.2.3 使用 PHPExcel 處理 Excel 表格


下載 PHPExcel(https://github.com/PHPOffice/PHPExcel

把下載的 zip 包解壓至 ./ThinkPHP/Library/Vendor 下

 

一、導入 Excel 數據

控制器自定,這里用 IndexController.class.php

<?php
namespace Home\Controller;
use Think\Controller;

class IndexController extends Controller {

    // 導入 Excel
    public function excel() {
        
        header('Content-type: text/html; charset=utf-8');

        vendor('PHPExcel.Classes.PHPExcel');
        $file = './Data/example.xlsx';

        $Excel = new \PHPExcel();
        // 如果excel文件后綴名為.xls
        // vendor("PHPExcel.Classes.PHPExcel.Reader.Excel5");
        // 如果excel文件后綴名為.xlsx
        vendor("PHPExcel.Classes.PHPExcel.Reader.Excel2007");
        $PHPReader = new \PHPExcel_Reader_Excel2007();

        // 載入文件 
        $Excel = $PHPReader -> load($file);

        //獲取表中的第一個工作表,如果要獲取第二個,把0改為1,依次類推
        $currentSheet = $Excel -> getSheet(0);
        //獲取總列數
        $allColumn = $currentSheet -> getHighestColumn();
        //獲取總行數
        $allRow = $currentSheet -> getHighestRow();
        //循環獲取表中的數據,$currentRow表示當前行,從哪行開始讀取數據,索引值從0開始
        for($currentRow = 1; $currentRow <= $allRow; $currentRow++) {
            //從哪列開始,A表示第一列
            for($currentColumn = 'A'; $currentColumn <= $allColumn; $currentColumn++) {
            //數據坐標
            $address = $currentColumn.$currentRow;
            //讀取到的數據,保存到數組$arr中
            $arr[$currentRow][$currentColumn] = $currentSheet 
                                                -> getCell($address) 
                                                -> getValue();
            }

        }
        echo '<pre>';
        var_export($arr);
    }
}

輸出:

array (
  1 => 
  array (
    'A' => '分公司名稱',
    'B' => '姓名',
    'C' => '金額',
  ),
  2 => 
  array (
    'A' => 'A分公司',
    'B' => '趙娟',
    'C' => 1100,
  ),
  3 => 
  array (
    'A' => 'B分公司',
    'B' => '孔堅',
    'C' => 1100,
  ),
  4 => 
  array (
    'A' => 'C分公司',
    'B' => '王華發',
    'C' => 1300,
  ),
  5 => 
  array (
    'A' => 'C分公司',
    'B' => '趙輝',
    'C' => 700,
  ),
  6 => 
  array (
    'A' => 'B分公司',
    'B' => '華發',
    'C' => 1400,
  ),
  7 => 
  array (
    'A' => 'A分公司',
    'B' => '趙德國',
    'C' => 700,
  ),
  8 => 
  array (
    'A' => 'B分公司',
    'B' => '沈芳虹',
    'C' => 500,
  ),
  9 => 
  array (
    'A' => 'C分公司',
    'B' => '周紅玉',
    'C' => 1100,
  ),
  10 => 
  array (
    'A' => 'A分公司',
    'B' => '施芬芳',
    'C' => 800,
  ),
  11 => 
  array (
    'A' => 'A分公司',
    'B' => '蔣國建',
    'C' => 1100,
  ),
  12 => 
  array (
    'A' => 'B分公司',
    'B' => '錢毅',
    'C' => 1400,
  ),
  13 => 
  array (
    'A' => 'B分公司',
    'B' => '陳華惠',
    'C' => 1200,
  ),
  14 => 
  array (
    'A' => 'C分公司',
    'B' => '曹香',
    'C' => 1400,
  ),
  15 => 
  array (
    'A' => 'A分公司',
    'B' => '鄭紅妙',
    'C' => 600,
  ),
  16 => 
  array (
    'A' => 'A分公司',
    'B' => '王宏仁',
    'C' => 800,
  ),
  17 => 
  array (
    'A' => 'C分公司',
    'B' => '何丹美',
    'C' => 1300,
  ),
)

  

需要導入的 Excel 文件如下:

  

 

二、導出 Excel

    // 導出 Excel
    public function export() {

        vendor('PHPExcel.Classes.PHPExcel');
        $Excel = new \PHPExcel();

        $arr = array ( 1 => array ( 'A' => '分公司名稱', 'B' => '姓名', 'C' => '金額', ), 2 => array ( 'A' => 'A分公司', 'B' => '趙娟', 'C' => 1100, ), 3 => array ( 'A' => 'B分公司', 'B' => '孔堅', 'C' => 1100, ), 4 => array ( 'A' => 'C分公司', 'B' => '王華發', 'C' => 1300, ), 5 => array ( 'A' => 'C分公司', 'B' => '趙輝', 'C' => 700, ), 6 => array ( 'A' => 'B分公司', 'B' => '華發', 'C' => 1400, ), 7 => array ( 'A' => 'A分公司', 'B' => '趙德國', 'C' => 700, ), 8 => array ( 'A' => 'B分公司', 'B' => '沈芳虹', 'C' => 500, ), 9 => array ( 'A' => 'C分公司', 'B' => '周紅玉', 'C' => 1100, ), 10 => array ( 'A' => 'A分公司', 'B' => '施芬芳', 'C' => 800, ), 11 => array ( 'A' => 'A分公司', 'B' => '蔣國建', 'C' => 1100, ), 12 => array ( 'A' => 'B分公司', 'B' => '錢毅', 'C' => 1400, ), 13 => array ( 'A' => 'B分公司', 'B' => '陳華惠', 'C' => 1200, ), 14 => array ( 'A' => 'C分公司', 'B' => '曹香', 'C' => 1400, ), 15 => array ( 'A' => 'A分公司', 'B' => '鄭紅妙', 'C' => 600, ), 16 => array ( 'A' => 'A分公司', 'B' => '王宏仁', 'C' => 800, ), 17 => array ( 'A' => 'C分公司', 'B' => '何丹美', 'C' => 1300, ), );

        // 設置
        $Excel
            ->getProperties()
            ->setCreator("dee")
            ->setLastModifiedBy("dee")
            ->setTitle("數據EXCEL導出")
            ->setSubject("數據EXCEL導出")
            ->setDescription("數據EXCEL導出")
            ->setKeywords("excel")
            ->setCategory("result file");

        foreach($arr as $key => $val) { // 注意 key 是從 0 還是 1 開始,此處是 0 
            // $num = $key + 1;
            $Excel ->setActiveSheetIndex(0)
                 //Excel的第A列,uid是你查出數組的鍵值,下面以此類推
                  ->setCellValue('A'.$key, $val['A'])     
                  ->setCellValue('B'.$key, $val['B'])
                  ->setCellValue('C'.$key, $val['C']);
        }

        $Excel->getActiveSheet()->setTitle('export');
        $Excel->setActiveSheetIndex(0);
        $name='example_export.xlsx'; 

        header('Content-Type: application/vnd.ms-excel');
        header('Content-Disposition: attachment; filename='.$name);
        header('Cache-Control: max-age=0');

        $ExcelWriter = \PHPExcel_IOFactory::createWriter($Excel, 'Excel2007');
        $ExcelWriter->save('php://output');
        exit;        
    }

導出的 example_export.xlsx 如圖:

  

 

右鍵 -- 屬性:

 

 

參考:

thinkphp3.2整合phpexcel

利用phpExcel實現Excel數據的導入導出(全步驟詳細解析)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM