PHPExcel export report encapsulation function (cell merging, setting fill color)

insert image description here

1. What is PHPExcel?

PHPExcel is a PHP class library for manipulating Office Excel documents, which is based on Microsoft's OpenXML standard and PHP language. You can use it to read and write spreadsheets in different formats.

2. Export the report

retrieve data

The data source can be obtained from the mysql database summary, or directly through the crawler to obtain the data passed by the API. In this example, the data is obtained from a third-party 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. Encapsulation function

libs/power.export.php

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

Form property settings

Instantiate the table and set the table properties

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

title settings

The table headers to be exported can be set in advance, and the codes can be merged and set according to the standard template.

 //一级标题行
    $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);

Merge Cells

    //合并单元格
    $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');

set alignment

  //对齐方式
    $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);

set data

 //设置填充
    $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]);
    }

generate form

  //设置当前的表格
    $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;

Summarize

@ Leak sometimes

Guess you like

Origin blog.csdn.net/weixin_41290949/article/details/129854069
Recommended