导入/导出指定表中的内容

审核中 讯睿功能 未结 已结 置顶 精帖
删除 置顶 取消置顶 加精 取消加精
66 0
yswl
yswl VIP3 2021-11-08 12:02:07
悬赏:60金币 编辑此贴

导入/导出指定表单中的部分数据

导出:


html

<a href="index.php?s=form&c=excel&m=index" class="btn blue btn-sm">{dr_lang('导出')}</a>


php

<?php namespace Phpcmf\Controllers;

/**
 * 二次开发时可以修改本文件,不影响升级覆盖
 */

class Excel extends \Phpcmf\Common
{

    // excel文件导出 方法一,使用 setCellValueByColumnAndRow
   public function index() {

        //查询休要导出的表
        $list = \Phpcmf\Service::M()->db->table('1_form_zscx')->get()->getResultArray();
        $title = ['姓名', '证件号','证件名称','证书'];   //导出的标题

       //循环数据集
        foreach ($list as $t){
            //文件路径处理
             if(is_numeric($t['zhengshu'])){
                 $f =  \Phpcmf\Service::C()->get_attachment($t['zhengshu']);  //获取指定id的文件路径
                 $fileurl = $f['url'];
             }else{
                 $fileurl =  $t['zhengshu'];  //原样输出
             }

             //指定需要导出的数据字段
             $data[] = ['title' => $t['title'], 'zjh' => $t['zjh'],'zsmc'=>$t['zsmc'],'zhengshu'=>$fileurl];
        }


        // Create new Spreadsheet object
        $spreadsheet = new \PhpOffice\PhpSpreadsheet\Spreadsheet();
        $sheet = $spreadsheet->getActiveSheet();
        
        
        $sheet->getColumnDimension('A')->setWidth(30);// 给A列设置宽度
        $sheet->getColumnDimension('B')->setWidth(30); // 给B列设置宽度
        $sheet->getColumnDimension('C')->setWidth(30); // 给C列设置宽度
        $sheet->getColumnDimension('D')->setWidth(50); // 给D列设置宽度
        //$sheet->getColumnDimension('B')->setAutoSize(true); // 给B列设置自动宽度

        
        
        $sheet->getRowDimension('1')->setRowHeight(15);// 给第一行设置行高,一般第一行是字段名称
        
        // 设置第一行背景和居中等
        $abc = array('A', 'B', 'C', 'D'); // 有多少列就列多少字母
        foreach ($abc as $a) {
            $sheet->getStyle($a.'1')->getFill()->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID)->getStartColor()->setRGB("efefef");
            $sheet->getStyle($a.'1')->getFont()->setBold(true);
            $sheet->getStyle($a.'1')->getFont()->setSize(12);
             // 第一行居中
            //$sheet->getStyle($a.'1')->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
            // 第一行居中对齐
            $sheet->getStyle($a.'1')->getAlignment()->setVertical(\PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER);
        }
        
            
        $sheet->setTitle('导出结果');// 工作表格名称
        

        // 方法一,使用 setCellValueByColumnAndRow
        //表头
        //设置单元格内容
        foreach ($title as $key => $value) {
            // 单元格内容写入
            $sheet->setCellValueByColumnAndRow($key + 1, 1, $value);
        }
        $row = 2; // 从第二行开始
        foreach ($data as $item) {
            $column = 1;
            foreach ($item as $value) {
                // 单元格内容写入
                $sheet->setCellValueByColumnAndRow($column, $row, $value);
                $column++;
            }
            $row++;
        }

        //文件名称
        $filename = date('Ymdhis',time());

        // Redirect output to a client’s web browser (Xlsx)
        header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
        header('Content-Disposition: attachment;filename="'.$filename.'.xlsx"');
        header('Cache-Control: max-age=0');
        // If you're serving to IE 9, then the following may be needed
        header('Cache-Control: max-age=1');

        // If you're serving to IE over SSL, then the following may be needed
        header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
        header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); // always modified
        header('Cache-Control: cache, must-revalidate'); // HTTP/1.1
        header('Pragma: public'); // HTTP/1.0

        $writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Xlsx');
        $writer->save('php://output');
        exit;
   }
   
}


导入:


待添加。。。



参考:https://www.xunruicms.com/doc/1026.html