调用方式:
    $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);
}


点赞(67)

评论列表 共有 0 条评论

暂无评论
立即
投稿
发表
评论
返回
顶部
{__SCRIPT__}