调用方式:
$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);
}
发表评论 取消回复