Excel.php 4.2 KB
<?php

namespace app\api\controller;

use app\common\controller\Api;
use fast\Tree;
use think\Db;
use think\Request;

class Excel extends Api
{
    protected $noNeedLogin = ['*'];
    protected $noNeedRight = ['*'];
    protected $rid;

    //构造函数
    public function _initialize()
    {
        parent::_initialize();
        $this->rid = $this->request->param('rid', 4);
    }

    /**
     * 导出
     * @param string $fileName
     * @param array $headArr
     * @param array $data
     * @throws \PHPExcel_Exception
     * @throws \PHPExcel_Reader_Exception
     * @throws \PHPExcel_Writer_Exception
     */
    public function excelExport($fileName = '', $headArr = [], $data = [])
    {

        $fileName .= "_" . date("YmdHi", time()) . ".xls";

        $objPHPExcel = new \PHPExcel();

        $objPHPExcel->getProperties();

        $key = ord("A"); // 设置表头

        foreach ($headArr as $v) {

            $colum = chr($key);

            $objPHPExcel->setActiveSheetIndex(0)->setCellValue($colum . '1', $v);

            $objPHPExcel->setActiveSheetIndex(0)->setCellValue($colum . '1', $v);

            $key += 1;

        }

        $column = 2;

        $objActSheet = $objPHPExcel->getActiveSheet();

        foreach ($data as $key => $rows) { // 行写入

            $span = ord("A");

            foreach ($rows as $keyName => $value) { // 列写入

                $objActSheet->setCellValue(chr($span) . $column, $value);

                $span++;

            }

            $column++;

        }

        $fileName = iconv("utf-8", "gb2312", $fileName); // 重命名表

        $objPHPExcel->setActiveSheetIndex(0); // 设置活动单指数到第一个表,所以Excel打开这是第一个表

        header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
        header('Content-Disposition: attachment;filename=' . $fileName);
        header('Cache-Control: max-age=0');
        // If you're serving to IE 9, then the following may be needed
        header('Cache-Control: max-age=1');

        // If you're serving to IE over SSL, then the following may be needed
        header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
        header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); // always modified
        header('Cache-Control: cache, must-revalidate'); // HTTP/1.1
        header('Pragma: public'); // HTTP/1.0

        $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
        $objWriter->save('php://output'); // 文件通过浏览器下载

        exit();


    }

    // 接口调用示例
    public function test()
    {
        $name = 'put';
        $header = ['序号', '姓名'];
        $list = Db::name('admin')->field('id,nickname')->select();
        $newdata = [];
        foreach ($list as $key => $item) {
            $newdata[$key]['id'] = $item['id'];
            $newdata[$key]['name'] = $item['nickname'];
        }

        $this->excelExport($name, $header, $list);
    }

    /**
     * 降雨量导出excel
     *
     */
    public function resvRainListOut()
    {
        $rid = $this->rid;
        $rrain = Db::name('reservoir_rain_rainfall')
            ->where(['reservoir_id' => $rid])
            ->field('id,total_rainfall,createtime')
            ->order('createtime', 'desc')
            ->select();
        $objPHPExcel = new \PHPExcel();

        $objPHPExcel->getProperties();
        $objPHPExcel->setActiveSheetIndex(0);
        $objPHPExcel->setActiveSheetIndex(0)
            ->setCellValue('A1', '1');


        for ($i = 0; $i < 1; $i++) {
            $objPHPExcel->getActiveSheet()->setCellValue('A2', 1);
        }

        $filename = '666_' . date('ymd', time()) . '.xls';
        $objPHPExcel->getActiveSheet()->setTitle('435');
        header("Content-Type: application/force-download");
        header("Content-Type: application/octet-stream");
        header("Content-Type: application/download");
        header('Content-Disposition:inline;filename="' . $filename . '"');
        //生成excel文件
        $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
        //下载文件在浏览器窗口
        $objWriter->save('php://output');
        exit;
    }


}