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