PHPExcel导出报表封装函数(单元格合并、设置填充色)

在这里插入图片描述

一、PHPExcel 是什么?

PHPExcel 是用来操作Office Excel 文档的一个PHP类库,它基于微软的OpenXML标准和PHP语言。可以使用它来读取、写入不同格式的电子表格。

二、导出报表

获取数据

数据来源可以是从mysql数据库汇总获取,也可以直接通过爬虫获取API传递过来的数据,本例从第三方API获取数据

    //电能报表;
    case "exReport1";
        require "libs/power.export.php";
        $filename = get_param("filename");
        $member_id = get_param("member_id");
        $filesName = $filename . date("Y.m.d");
        $row = $db->fetch('member', 'member_depart,energyid', array('member_id' => $member_id), 'member_id DESC');
        $group_id = $row['energyid'];
        $member_depart = $row['member_depart'];
        if ($group_id && $group_id != "0") {
            $url = curlIotAPI($CONF["api_iot_pipe"], '1', '1000', $CONF["api_user_key"], $group_id);
            $reArr = json_decode($url, true);
            $data_int = $reArr["data"];
            $arr = getIotPower($data_int["data"]);
            expExcel($arr, $filesName, $member_depart);
            //die(json_encode_lockdata($res));
        } else {
            die("无数据");
        }
        break;

2.封装函数

libs/power.export.php

function expExcel($arr, $name, $title)
{
//核心代码
}

表格属性设置

实例化表格,设置表格属性

$objPHPExcel = new PHPExcel();
    $objPHPExcel->getProperties()->setCreator("电能报表")
        ->setLastModifiedBy("电能报表")
        ->setTitle('电能报表数据导出')
        ->setSubject('电能报表数据导出')
        ->setDescription('导出数据')
        ->setKeywords("excel")
        ->setCategory("result file");

标题设置

可以将要导出的表格表头提前设置好,按照标准模版进行代码的合并和设置。

 //一级标题行
    $objPHPExcel->setActiveSheetIndex(0);
    $objPHPExcel->getActiveSheet()
        ->setCellValue('A1', $title . '电能报表')
        ->setCellValue('A2', '生成时间:' . date("Y-m-d H:i:s"))
        ->setCellValue('A3', '')
        ->setCellValue('C3', '日电量 Kwh')
        ->setCellValue('F3', '月电量 Kwh')
        ->setCellValue('L3', '年电量 Kwh')
        ->setCellValue('A4', '排序')
        ->setCellValue('B4', '位置')
        ->setCellValue('C4', date("Y-m-d"))
        ->setCellValue('D4', date("Y-m-d", strtotime("-1 days")))
        ->setCellValue('E4', date("Y-m-d", strtotime("-2 days")))
        ->setCellValue('F4', date("Y-m"))
        ->setCellValue('G4', date("Y-m", strtotime("-1 months")))
        ->setCellValue('H4', date("Y-m", strtotime("-2 months")))
        ->setCellValue('I4', date("Y-m", strtotime("-3 months")))
        ->setCellValue('J4', date("Y-m", strtotime("-4 months")))
        ->setCellValue('k4', date("Y-m", strtotime("-5 months")))
        ->setCellValue('L4', date("Y"))
        ->setCellValue('M4', date("Y", strtotime("-1 years")))
        ->setCellValue('N4', date("Y", strtotime("-2 years")))
        ->getStyle('A4:N4')->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_RED);

合并单元格

    //合并单元格
    $objPHPExcel->getActiveSheet()->mergeCells('A1:N1');
    $objPHPExcel->getActiveSheet()->mergeCells('A2:N2');
    $objPHPExcel->getActiveSheet()->mergeCells('A3:B3');
    $objPHPExcel->getActiveSheet()->mergeCells('C3:E3');
    $objPHPExcel->getActiveSheet()->mergeCells('F3:K3');
    $objPHPExcel->getActiveSheet()->mergeCells('L3:N3');

设置对齐方式

  //对齐方式
    $objPHPExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
    $objPHPExcel->getActiveSheet()->getStyle('A2')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
    $objPHPExcel->getActiveSheet()->getStyle('C3')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
    $objPHPExcel->getActiveSheet()->getStyle('F3')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
    $objPHPExcel->getActiveSheet()->getStyle('L3')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);

设置数据

 //设置填充
    $objPHPExcel->getActiveSheet()->getStyle('C3')->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
    $objPHPExcel->getActiveSheet()->getStyle('C3')->getFill()->getStartColor()->setARGB('FF808080');
    $objPHPExcel->getActiveSheet()->getStyle('L3')->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
    $objPHPExcel->getActiveSheet()->getStyle('L3')->getFill()->getStartColor()->setARGB('FF808080');

  $key = 4;
    for ($i = 0; $i < count($arr); $i++) {
        $dlVal = explode(",", $arr[$i]['data']['propertyType']);
        $sdVal = explode(",", $arr[$i]['sdata']);
        $yesterday_val = explode(",", $arr[$i]['odata']['yesterday_val']);
        $b_yesterday_val = explode(",", $arr[$i]['odata']['b_yesterday_val']);
        $three_days_ago_val = explode(",", $arr[$i]['odata']['three_days_ago_val']);
        $last_month_val = explode(",", $arr[$i]['odata']['last_month_val']);
        $b_last_month_val = explode(",", $arr[$i]['odata']['b_last_month_val']);
        $three_month_ago_val = explode(",", $arr[$i]['odata']['three_month_ago_val']);
        $last_year_val = explode(",", $arr[$i]['odata']['last_year_val']);
        $b_last_year_val = explode(",", $arr[$i]['odata']['b_last_year_val']);
        $three_years_ago_val = explode(",", $arr[$i]['odata']['three_years_ago_val']);
        $four_month_ago_val = explode(",", $arr[$i]['odata']['four_month_ago_val']);
        $five_month_ago_val = explode(",", $arr[$i]['odata']['five_month_ago_val']);
        $six_month_ago_val = explode(",", $arr[$i]['odata']['six_month_ago_val']);
        $sdVal_p = array();

        for ($j = 0; $j < count($dlVal); $j++) {
            if ($dlVal[$j] == "电量") {
                //日
                $sdVal_p[0] = getPositive($sdVal[$j] - $yesterday_val[$j]);
                $sdVal_p[1] = getPositive($yesterday_val[$j] - $b_yesterday_val[$j]);
                $sdVal_p[2] = getPositive($b_yesterday_val[$j] - $three_days_ago_val[$j]);
                //月
                $sdVal_p[3] = getPositive($sdVal[$j] - $last_month_val[$j]);
                $sdVal_p[4] = getPositive($last_month_val[$j] - $b_last_month_val[$j]);
                $sdVal_p[5] = getPositive($b_last_month_val[$j] - $three_month_ago_val[$j]);
                $sdVal_p[9] = getPositive($three_month_ago_val[$j] - $four_month_ago_val[$j]);
                $sdVal_p[10] = getPositive($four_month_ago_val[$j] - $five_month_ago_val[$j]);
                $sdVal_p[11] = getPositive($five_month_ago_val[$j] - $six_month_ago_val[$j]);
                //年
                $sdVal_p[6] = getPositive($sdVal[$j] - $last_year_val[$j]);
                $sdVal_p[7] = getPositive($last_year_val[$j] - $b_last_year_val[$j]);
                $sdVal_p[8] = getPositive($b_last_year_val[$j] - $three_years_ago_val[$j]);
            }
        }

        $key++;
        $objPHPExcel->getActiveSheet()
            ->setCellValue('A' . $key, $arr[$i]["device_seq"])
            ->setCellValue('B' . $key, $arr[$i]["device"])
            ->setCellValue('C' . $key, $sdVal_p[0])
            ->setCellValue('D' . $key, $sdVal_p[1])
            ->setCellValue('E' . $key, $sdVal_p[2])
            ->setCellValue('F' . $key, $sdVal_p[3])
            ->setCellValue('G' . $key, $sdVal_p[4])
            ->setCellValue('H' . $key, $sdVal_p[5])
            ->setCellValue('I' . $key, $sdVal_p[9])
            ->setCellValue('J' . $key, $sdVal_p[10])
            ->setCellValue('K' . $key, $sdVal_p[11])
            ->setCellValue('L' . $key, $sdVal_p[6])
            ->setCellValue('M' . $key, $sdVal_p[7])
            ->setCellValue('N' . $key, $sdVal_p[8]);
    }

生成表格

  //设置当前的表格
    $objPHPExcel->setActiveSheetIndex(0);
    //ob_end_clean();

    header('Content-Type: application/vnd.ms-excel');
    header('Content-Disposition: attachment;filename="' . $name . '.xls');
    header('Cache-Control: max-age=0');
    header('Content-Type: text/html; charset=utf-8');
    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
    $objWriter->save('php://output');
    exit;

总结

@漏刻有时

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

漏刻有时

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值