php 导出数据到Excel
当前使用PHPExcel 1.6版本(1.8版本还可简化)
//导出Excel public function outExcel() {// 设置文件名 $file_name = date("YmdHis",time()).".xlsx"; $headerData = ['表头1', '表头2', '表头3', ...]; $sheet_title = 'Excel表名'; $columnWidths = [10, 10, 45, 40, 10, 20]; $atsk = ["作者","标题", "主题","描述"];//按表头$headerData顺序设置数据 $arr = array(array('数据1','数据2','数据3',...),array('数据1','数据2','数据3',...),...); // 输出 Excel 文件 $this->createExcel($file_name,$sheet_title,$headerData,$columnWidths,$arr,$atsk); } /** * 创建 Excel 文件 * @param string $file_name 文件名 * @param string $sheet_title 工作表名称 * @param array $headerData 表头数据 * @param array $columnWidths 列宽 * @param array $atsk 任务数组[0=>'创建者、最后修改者',1=>'标题',2=>'主题',3=>'描述'] * @param array $DataArr 数据数组 * @param string $file_type 文件类型,默认为 Excel2007 * @return void */ function createExcel($file_name,$sheet_title,$headerData,$columnWidths,$dataArr,$atsk,$file_type='Excel2007'){ // 引入 Excel 类库 vendor('Excel.PHPExcel'); vendor('Excel.PHPExcel.IOFactory'); // 创建一个新的 Excel 对象 $objPHPExcel = new \PHPExcel(); // 设置文档属性 $objPHPExcel->getProperties()->setCreator($atsk[0]); $objPHPExcel->getProperties()->setLastModifiedBy($atsk[0]); $objPHPExcel->getProperties()->setTitle($atsk[1]); $objPHPExcel->getProperties()->setSubject($atsk[2]); $objPHPExcel->getProperties()->setDescription($atsk[3]); //当前操作的工作表对象 $sheet = $objPHPExcel->getActiveSheet(); // 设置工作表名称 $sheet->setTitle($sheet_title); // 设置通用样式 $styleArray = [ 'alignment' => [ 'horizontal' => \PHPExcel_Style_Alignment::HORIZONTAL_CENTER, 'vertical' => \PHPExcel_Style_Alignment::VERTICAL_CENTER, ], ]; // 设置表头样式 $headerStyle = [ 'alignment' => $styleArray['alignment'], 'font' => ['bold' => true], ]; // 写入表头数据 foreach ($headerData as $index => $header) { $sheet->setCellValueByColumnAndRow($index, 1, $header); $sheet->getColumnDimensionByColumn($index)->setWidth($columnWidths[$index]); $sheet->getStyleByColumnAndRow($index, 1)->applyFromArray($headerStyle); } // 写入数据 $rowNumber = 2;//从第二行开始写入数据 foreach ($dataArr as $value) { for ($index = 0; $index < count($value); $index++) { $sheet->setCellValueByColumnAndRow($index, $rowNumber, $value[$index]); $sheet->getStyleByColumnAndRow($index, $rowNumber)->applyFromArray($styleArray); } $rowNumber++; } header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); header('Content-Disposition: attachment;filename="'. $file_name. '"'); $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, $file_type); $objWriter->save('php://output'); }