phpoffice/phpspreadsheet导入导出数据 教程

当你在使用 phpoffice/phpexcel 类库时候。composer 会给你提示一句话:

Package phpoffice/phpexcel is abandoned, you should avoid using it. Use phpoffice/phpspreadsheet instead

中文翻译

软件包 phpoffice/phpexcel 被放弃了,您应该避免使用它。 使用 phpoffice/phpspreadsheet 代替

 

phpexcel已被废弃,建议我们用phpspreadsheet。下面就给大家说说“phpoffice/phpspreadsheet导入导出数据”教程:

 

包地址:

https://packagist.org/packages/phpoffice/phpspreadsheet

 

composer:

composer require phpoffice/phpspreadsheet

 

使用:

引入

use \PhpOffice\PhpSpreadsheet\Spreadsheet;
use \PhpOffice\PhpSpreadsheet\IOFactory;
//use \PHPExcel_Style_NumberFormat;    //设置列的格式==>>设置文本格式

 

导出代码:

//execl模板下载
    public function template_download()
    {
        $newExcel = new Spreadsheet();  //创建一个新的excel文档
        $objSheet = $newExcel->getActiveSheet();  //获取当前操作sheet的对象
        $objSheet->setTitle('导入模板');  //设置当前sheet的标题

        //设置宽度为true,不然太窄了
        $newExcel->getActiveSheet()->getColumnDimension('A')->setAutoSize(true);
        $newExcel->getActiveSheet()->getColumnDimension('B')->setAutoSize(true);
        $newExcel->getActiveSheet()->getColumnDimension('C')->setAutoSize(true);

        //设置第一栏的标题
        $objSheet->setCellValue('A1', '用户id')
            ->setCellValue('B1', '昵称')
            ->setCellValue('C1', '手机号');

        //默认数据
        $explame_data_list = array(
            array(
                'user_id' => '1',
                'nickname' => '小明',
                'phone' => '15012345678',
            ),
        );

        //第二行起,每一行的值,setCellValueExplicit是用来导出文本格式的。
        //->setCellValueExplicit('C' . $k, $val['admin_password']PHPExcel_Cell_DataType::TYPE_STRING),可以用来导出数字不变格式
        $baseRow = 2; //数据从N-1行开始往下输出 这里是避免头信息被覆盖
        foreach ($explame_data_list as $k => $val) {
            $i = $k + $baseRow;
            $objSheet->setCellValue('A' . $i, $val['user_id'])
                ->setCellValue('B' . $i, $val['nickname'])
                ->setCellValue('C' . $i, $val['phone']);
        }

        $this->downloadExcel($newExcel, '会员批量导入模板', 'Xls');
    }

    //公共文件,用来传入xls并下载
    private function downloadExcel($newExcel, $filename, $format)
    {
        // $format只能为 Xlsx 或 Xls
        if ($format == 'Xlsx') {
            header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
        } elseif ($format == 'Xls') {
            header('Content-Type: application/vnd.ms-excel');
        }

        header("Content-Disposition: attachment;filename="
            . $filename . date('Y-m-d') . '.' . strtolower($format));
        header('Cache-Control: max-age=0');
        $objWriter = IOFactory::createWriter($newExcel, $format);

        $objWriter->save('php://output');

        //通过php保存在本地的时候需要用到
        //$objWriter->save($dir.'/demo.xlsx');

        //以下为需要用到IE时候设置
        // 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
        exit;
    }

 

导入代码:

//会员批量导入提交
    public function import_batch_send()
    {
        header("content-type:text/html;charset=utf-8");
        //上传excel文件
        $file = request()->file('file');
        //将文件保存到public/uploads目录下面
        $info = $file->validate(['size' => 1048576, 'ext' => 'xls'])->move('./uploads');
        if ($info) {
            //获取上传到后台的文件名
            $fileName = $info->getSaveName();
            //获取文件路径
            $filePath = Env::get('root_path') . 'public' . DIRECTORY_SEPARATOR . 'uploads' . DIRECTORY_SEPARATOR . $fileName;
            //获取文件后缀
            $suffix = $info->getExtension();
            // 有Xls和Xlsx格式两种
            $reader = IOFactory::createReader('Xls');
        } else {
            return json(['status' => '1', 'message' => '文件过大或格式不正确导致上传失败-_-!']);
        }
        //载入excel文件
        $excel = $reader->load($filePath, $encode = 'utf-8');
        //读取第一张表
        $sheet = $excel->getSheet(0);
        //获取总行数
        $row_num = $sheet->getHighestRow();
        //获取总列数
        $col_num = $sheet->getHighestColumn();

        $import_data = []; //数组形式获取表格数据
        for ($i = 2; $i <= $row_num; $i++) {
            $import_data[$i]['nickname']   = $excel->getActiveSheet()->getCell("A" . $i)->getValue();
            $import_data[$i]['phone']    = $excel->getActiveSheet()->getCell("C" . $i)->getValue();
        }

        if (empty($import_data)) {
            return json(['status' => '1', 'message' => '数据解析失败']);
        }

        //校验手机号是否重复
        $phone_array = array_column($import_data, 'phone');
        $phone_ids = implode(',', $phone_array);
        $result_phone = db('user')
            ->field('phone')
            ->where('phone', 'in', $phone_ids)
            ->select();
        if (!empty($result_phone)) {
            $result_phone_array = array_column($result_phone, 'phone');
            $result_phone_ids = implode(',', $result_phone_array);
            return json(['status' => '3', 'message' => '数据重复', 'result' => $result_phone_ids]);
        }

        //将数据保存到数据库
        $res = db('user')->insertAll($import_data);
        if ($res) {
            return json(['status' => '2', 'message' => '导入成功']);
        } else {
            return json(['status' => '1', 'message' => '提交失败,请刷新重试']);
        }
    }
    A+
发布日期:2019年12月02日 15:20:52  所属分类:PHP
最后更新时间:2019-12-02 15:20:52
评分: (1 票;平均数5.00 ;最高评分 5 ;用户总数1;总得分 5;百分比100.00)
头像
刷流量 刷人气 刷点击 刷收藏 刷APP关键词
刷流量 刷人气 刷点击 刷收藏 刷APP关键词
  • ¥ 1.0元
  • 市场价:9.9元
服务器管理面板/主机控制面板“安装”服务
服务器管理面板/主机控制面板“安装”服务
  • ¥ 9.9元
  • 市场价:49.9元
花牛苹果 甘肃天水 李宏恩家自种 1斤 包邮
花牛苹果 甘肃天水 李宏恩家自种 1斤 包邮
  • ¥ 6.8元
  • 市场价:8.8元
免费SSL证书 HTTPS申请 安装 配置 支持通配符*
免费SSL证书 HTTPS申请 安装 配置 支持通配符*
  • ¥ 199.9元
  • 市场价:20000元

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: