调用方式:
$excelkey = [['序号', '学员ID', '姓名', '身份证号', '区县', '单位', '培训年度', '课程类型', '课程名称', '报名时间', '是否考试通过', '缴费类型']];
return $this->outPutCsv($exportData, $excelkey, '学员报名管理');
/** * 使用phpspreadsheet导出大数据的csv格式 * 注意传值的顺序要保持一致$excelkey,标题title的文字,要和数据中的字段顺序保持一致; * $excelval只是字段的键值,去重, */ public function outPutCsv($data = [], $comments = [], $outname = '导出') { set_time_limit(0); if (!$data || !$comments) $this->error('暂无导出信息'); $arrData = array_merge($comments, $data); $spreadsheet = new \PhpOffice\PhpSpreadsheet\Spreadsheet(); // 设置单元格格式 可以省略 $styleArray = [ 'font' => [ 'bold' => true, 'size' => 14, ], ]; $spreadsheet->getActiveSheet()->getStyle('A1:B1')->applyFromArray($styleArray); $spreadsheet->getActiveSheet()->getColumnDimension('A')->setWidth(25); $spreadsheet->getActiveSheet()->getColumnDimension('B')->setWidth(25); $spreadsheet->getActiveSheet()->fromArray($arrData); $writer = new \PhpOffice\PhpSpreadsheet\Writer\Csv($spreadsheet); $filedir = DS . 'uploads' . DS . 'downexcel' . DS . date('Y-m-d');//文件目录 $file = ROOT_PATH . 'public' . $filedir;//文件绝对目录 if (!is_dir($file)) { mkdir($file, 0777, true); } $filedate = $outname . date('YmdHis', time());//文件名字 $filename = $file . DS . $filedate . ".csv";//文件绝对路径的名字 $fp = fopen($filename, 'a+');//打开output流 $dataNum = count($arrData); $perSize = 1000;//每次导出的条数 $pages = ceil($dataNum / $perSize); for ($i = 1; $i <= $pages; $i++) { $arrDataOut = array_slice($arrData, $perSize * ($i - 1), $perSize); foreach ($arrDataOut as $item) { // mb_convert_variables('GBK', 'UTF-8', $item); fputcsv($fp, $item); } //刷新输出缓冲到浏览器 ob_flush(); flush();//必须同时使用 ob_flush() 和flush() 函数来刷新输出缓冲。 } fclose($fp); $data = $filedir . DS . $filedate . ".csv"; return $this->success('导出成功', $data); }
发表评论 取消回复