PHP中使用PhpSpreadsheet 读取mysql ,生成excel下载

安装phpoffice/phpspreadsheet

composer require phpoffice/phpspreadsheet

github地址: https://github.com/PHPOffice/PhpSpreadsheet

PhpSpreadsheet's documentation相关文档:https://phpspreadsheet.readthedocs.io/en/develop/

使用范例(范例使用ThinkPHP5.0框架)

  /**
     * 表格数据导出
     */
    public function export_excel()
    {
        //获取任务对应的表名,以及采集数据id
        $param = $this->request->param();
        $id = $param['id'];
        $info = Db::name('crawler_task')->where('id', $id)->find();
        $table_name = $info['table_name'];
        $crawler_id = json_decode($info['crawler_id'], true);
        //获取数据
        $data = Db::table($info['table_name'])->whereIn('id', $crawler_id)->select()->toArray();

        //获取表信息
        $sql = "SHOW FULL COLUMNS FROM $table_name";
        $table_structure = Db::table($table_name)->query($sql);
        $table_field = array_column($table_structure, 'Field');
        $spreadsheet = new Spreadsheet();
        $worksheet = $spreadsheet->getActiveSheet();
        $field_len = count($table_field);
        $end_alpha = chr(63 + $field_len);


//        设置表标题名称
        $worksheet->setTitle($info['task_name']);

        //循环填充第一行数据
        foreach ($table_structure as $key => $value) {
            if ($value['Field'] != 'id') { //去除id表头
                $worksheet->setCellValueByColumnAndRow($key, 1, $value['Field']);
            }
        }
        //设置第一行样式
        $styleArray = [
            'font' => [
                'bold' => true
            ],
            'alignment' => [
                'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER,
            ],
        ];
        $worksheet->getStyle('A1:' . $end_alpha . '1')->applyFromArray($styleArray)->getFont()->setSize(14);

        //填充表数据
        $len = count($data);
        for ($i = 0; $i < $len; $i++) {
            $j = $i + 2;
            foreach ($table_field as $key => $value) {
                if ($key != 0) { //去除id数据
                    $worksheet->setCellValueByColumnAndRow($key, $j, $data[$i][$value]);
                }
            }
        }

        //设置数据表格样式
        $styleArrayBody = [
            'borders' => [
                'allBorders' => [
                    'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN,
                    'color' => ['argb' => '666666'],
                ],
            ],
            'alignment' => [
                'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER,
            ],
        ];

        $total_rows = $len + 1;
        //添加所有边框/居中
        $worksheet->getStyle('A1:' . $end_alpha . $total_rows)->applyFromArray($styleArrayBody);

        $file_name = $info['task_name'] . ".xls";
        header('Content-Type: application/vnd.ms-excel');
        header('Content-Disposition: attachment;filename=' . $file_name );
        header('Cache-Control: max-age=0');
        $writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Xls');
        $writer->save('php://output');


    }

猜你喜欢

转载自blog.csdn.net/supramolecular/article/details/83303944
今日推荐