zoukankan      html  css  js  c++  java
  • TP5使用Composer安装PhpSpreadsheet类库实现导入导出

    PhpSpreadsheet是PHPExcel的下一个版本。它打破了兼容性,大大提高了代码库质量(命名空间,PSR合规性,最新PHP语言功能的使用等)。

    由于所有努力都转移到了PhpSpreadsheet,因此将不再维护PHPExcel。PHPExcel,补丁和新功能的所有贡献都应该针对PhpSpreadsheet开发分支。

    说明:由于PHPExcel已更名phpspreadsheet,PHPExcel已不再更新,兼容新版本PHP会存在某些问题,建议升级到PHPSpreadsheet。

      PHPExcel已经被废弃在PHP7.2中已经无法获取更新,官方重新开了一个新包phpspreadsheet
    环境及版本:ThinkPHP5.1.24、PHP7.2.8、Nginx1.15.3
    功能实现:使用phpspreadsheet导出Excel、导入Excel返回数组数据
    安装说明:请先使用composer安装依赖:composer install
    在线地址:http://demo.linzening.club/
    Git地址:https://gitee.com/linzening/newthink

    重要的事情说N遍,建议使用       phpspreadsheet

    composer安装

    composer require phpoffice/phpspreadsheet

    安装好之后

    <!-- Excle导入 开始 -->
        <form action="/admin/market/csj_upExcle" method="post" enctype="multipart/form-data" class="layui-form layui-form-pane form-search dd1">
            <div class="layui-form-item layui-inline">
                <label class="layui-form-label">导入文件</label>
                <div class="layui-input-inline" style=" 160px;">
                    <input name="csjexclefile" class="layui-input" type="file">
                </div>
                <input type="hidden" name="now_time" class="csj_date" value=""><div class="layui-input-inline" style=" 100px;">
                    <input class="layui-input csjSubmit" type="submit" value="上传" style=" 55px;">
                </div></div>
        </form>

    只需要看form表单中input-name即可,其他的是  layui    不用管,提交表单之后   后台

    <?php
    namespace appadmincontroller;
    
    use controllerBasicAdmin;use thinkDb;use PHPExcel_IOFactory;
    use PhpOfficePhpSpreadsheetSpreadsheet;
    use PhpOfficePhpSpreadsheetIOFactory;
    use thinkLoader;
    use serviceAliyunLogService;
    
    /**
     * 大盘总览
     * Class Market
     * @package appadmincontroller
     */
    class Index extends BasicAdmin
    {public function csj_upExcle()
        {
            header("content-type:text/html;charset=utf-8");
            $file = request()->file('csjexclefile');
            //将文件保存到public/uploads目录下面
            $info = $file->move('./uploads');
            if ($info) {
                //获取上传到后台的文件名
                $fileName = $info->getSaveName();
                //获取文件路径.
                $filePath =__DIR__."/../../../uploads"      . DIRECTORY_SEPARATOR . $fileName;
                //获取文件后缀
                $suffix = $info->getExtension();
                // 有Xls和Xlsx和Cvs格式三种
                if ($suffix=="xls")
                {
                    $reader = IOFactory::createReader('Xls');
                }elseif ($suffix=="xlsx")
                {
                    $reader = IOFactory::createReader('Xlsx');
                }elseif ($suffix=="csv")
                {
                    $reader = IOFactory::createReader('Csv');
                }
            } else {
                return "<script>alert('文件过大或格式不正确导致上传失败-_-!');window.history.back(-1);</script>";
            }
            //如果是cvs文件则不走PhpSpreadsheet
            if ($suffix=="csv")
            {
                $handle = fopen($filePath,'r');
                if (!$handle)
                {
                    return "<script>alert('读取文件失败-_-!');window.history.back(-1);</script>";
                }
                //不取第一个集合(第一个集合是主题)
                $j = 0;
                //新数组下标从0开始
                $k = 0;
                $new_insert_data = [];
                while(($data = fgetcsv($handle)) !== false)
                {
                    for ($i = 0; $i < count($data); $i++) {
                        $data[$i] = iconv('gbk', 'utf-8', $data[$i]);
                    }
                    if ($j>0)
                    {
                        if (in_array($data[1],$gameArr))
                        {
                            $new_insert_data[$k]['game_name'] = $data[1];
                            $new_insert_data[$k]['date'] = date("Y-m-d",strtotime($data[0]));
                            $new_insert_data[$k]['channel'] = $data[2];
                            $new_insert_data[$k]['c_income'] = $data[3];
                            $new_insert_data[$k]['c_impel_income'] = $data[4];
                            $new_insert_data[$k]['c_information_income'] = $data[5];
                            $new_insert_data[$k]['c_all_video_income'] = $data[6];
                            $new_insert_data[$k]['c_start_video_income'] = $data[7];
                            $new_insert_data[$k]['c_insert_video_income'] = $data[8];
                            $new_insert_data[$k]['c_banner_income'] = $data[9];$k++;
                        }
                    }
                    $j++;
                }
            }else{
                //载入excel文件
                $excel = $reader->load($filePath);
                //读取第一张表
                $sheet = $excel->getSheet(0);
                //var_dump($sheet);die();
                //获取总行数
                $row_num = $sheet->getHighestRow();
                //获取总列数
                $col_num = $sheet->getHighestColumn();
                $insert_data = [];
                for ($i = 2; $i <= $row_num; $i++) {
                    $game_name = $excel->getActiveSheet()->getCell("B" . $i)->getValue();
                    if (in_array($game_name,$gameArr))
                    {$insert_data[$i]['date'] = gmdate('Y-m-d',intval(($excel->getActiveSheet()->getCell("A" . $i)->getValue() - 25569) * 3600 * 24));
                        $insert_data[$i]['game'] = $excel->getActiveSheet()->getCell("B" . $i)->getValue();
                        $insert_data[$i]['chel'] = $excel->getActiveSheet()->getCell("C" . $i)->getValue();
                        $insert_data[$i]['c_me'] = $excel->getActiveSheet()->getCell("D" . $i)->getValue();
                        $insert_data[$i]['c_icome'] = $excel->getActiveSheet()->getCell("E" . $i)->getValue();
                        $insert_data[$i]['c_inincome'] = $excel->getActiveSheet()->getCell("F" . $i)->getValue();
                        $insert_data[$i]['c_alincome'] = $excel->getActiveSheet()->getCell("G" . $i)->getValue();
                        $insert_data[$i]['c_stacome'] = $excel->getActiveSheet()->getCell("H" . $i)->getValue();
                        $insert_data[$i]['c_ins_income'] = $excel->getActiveSheet()->getCell("I" . $i)->getValue();
                        $insert_data[$i]['c_e'] = $excel->getActiveSheet()->getCell("J" . $i)->getValue();
                        $insert_data[$i]['c_come'] = $excel->getActiveSheet()->getCell("K" . $i)->getValue();
                    }
                }
                if (empty($insert_data)) {
                    return "<script>alert('数据解析失败,请检查Excle序列号是否连续/联系管理员!');window.history.back(-1);</script>";
                }
                $new_insert_data = array_values($insert_data);
            }
          //入库就好了
    $res = $this->insertCsj(); if ($res) { return "<script>alert('导入成功!');window.history.back(-1);</script>"; } } }

    我这边没有导入cvs结尾的excle表格没有走  PhpSpreadsheet    因为中文读取为空。可能是我的表哥有问题吧。

    我的表格这个样子

  • 相关阅读:
    修改element ui默认样式
    MyUI是美亚柏科旗下新德汇出品的Web前端一站式项目工程框架。
    细谈 axios和ajax区别
    Window MySQL远程连接不上的解决
    为什么要前后端分离?各有什么优缺点?
    原生js
    node.js安装及环境配置之Windows篇
    IDEA 导入若依管理系统
     Java图形验证码,支持gif、中文、算术等类型,可用于Java Web、JavaSE等项目。
    获取git仓库时更新类型update type 的选择
  • 原文地址:https://www.cnblogs.com/T8888/p/12607570.html
Copyright © 2011-2022 走看看