>PHP 프레임워크 >ThinkPHP >ThinkPhp5.1 + PHPExcel 프로덕션 데이터 가져오기

ThinkPhp5.1 + PHPExcel 프로덕션 데이터 가져오기

XuPing.Yang
XuPing.Yang원래의
2022-02-16 17:29:102420검색

데이터 가져오기는 여러 곳에서 필요합니다. ThinkPhp5.1을 사용하여 데이터 가져오기를 수행하는 방법 다음으로 편집기에서 전체 프로세스를 이해하도록 안내합니다.

1 준비

편집기는 PHPExcel을 통해 데이터 가져오기를 구현하므로 제작 전에 먼저 PHPExcel 관련 구성요소를 다운로드해야 합니다. 현재 tp5.1은 Composer 설치를 지원하며, 편집자는 Composer를 통해 PHPExcel 구성요소를 설치합니다. [권장: thinkphp 비디오 튜토리얼]

설치하기 전에 먼저 컴퓨터에 Composer 구성 요소가 있는지 확인해야 합니다. Composer가 아직 설치되지 않은 경우 Linux 및 Mac OS X에서 다음 명령을 실행할 수 있습니다.

curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer

Windows에서는 Composer-Setup.exe를 다운로드하여 실행해야 합니다. 다운로드 주소:

https://www.kancloud.cn/manual/thinkphp5_1/353948

Composer 설치 후 PHPExcel을 설치해야 합니다. , win+R, 인터페이스 실행 열기, cmd 입력, 관리 인터페이스 입력, 프로젝트가 있는 드라이브 문자 입력(여기서는 D 드라이브를 예로 들어, 프로젝트는 D:phpstudy_proWWWmyapp.io에 있음) Enter를 클릭하세요:

ThinkPhp5.1 + PHPExcel 프로덕션 데이터 가져오기

입력: cd D: phpstudy_proWWWmyapp.io, 프로젝트가 있는 디렉토리를 찾으세요

ThinkPhp5.1 + PHPExcel 프로덕션 데이터 가져오기

다음 단계는 PHPExcel 플러그인을 설치하는 것입니다. 다음을 입력하세요: Composer require phpoffice/phpexcel, Enter를 클릭하여 PHPExcel 설치를 시작합니다.

2 프론트엔드 제출 페이지

html

<form class="layui-form" enctype="multipart/form-data">
    <input type="hidden" name="type_id" value="{$type_id}">
    <div class="layui-form-item" style="margin-left: 42px;">
        <div class="layui-input-inline" style="width: 122px;">
            <button type="button" class="layui-btn" name="file" lay-verify="file" id="test3"><i class="layui-icon"></i>上传文件</button>
        </div>
    </div>
    <div class="layui-form-item" style="margin-left: 42px;">
        <div class="layui-input-inline">
            <button  class="layui-btn" lay-filter="add" lay-submit="add">
                导入
            </button>
        </div>
    </div>
    <div class="layui-form-item">
        <div class="layui-input-block">
            <div style="line-height: 35px;">
                注:
                <p>1.文件大小:请上传小于10M的文件</p>
                <p>2.文件类型:上传时首先
                    <span class="common-a">
                <a href="/import/member.xlsx">下载导入模板</a>
            </span>,填好信息后上传</p>
            </div>
        </div>
    </div>
</form>

js

<script>
    layui.use([&#39;form&#39;, &#39;layer&#39;,&#39;upload&#39;], function () {
        $ = layui.jquery;
        var form = layui.form
            , layer = layui.layer;

        var $ = layui.jquery,
            upload = layui.upload;

        upload.render({
            elem: &#39;#test3&#39;
            ,url: &#39;你的上传路径&#39;
            ,accept: &#39;file&#39; //普通文件
            ,exts: &#39;xls|xlsx&#39;
            ,size:&#39;10240&#39;
            ,done: function(res){
                $(&#39;#test3&#39;).append(&#39;<input type="text" name="file" id="file" lay-verify="file" value="&#39;+res.data +&#39;" />&#39;)
            }
        });
        //监听提交
        form.on(&#39;submit(add)&#39;, function(data){
            console.log(data);
            //发异步,把数据提交给php
            $.post(&#39;{:url(\&#39;saveImportMember\&#39;)}&#39;,$(&#39;form&#39;).serialize(),function(data){
                if(data.res == 1){
                    layer.msg(data.msg);
                    setTimeout(function(){parent.window.location.reload();},1000);
                }else if(data.res == 0){
                    layer.alert(data.msg,{icon: 2});
                }else{
                    layer.alert(&#39;操作失败&#39;,{icon: 2});
                }
            })
            return false;
        });
    });
</script>

3 백그라운드 처리

다음은 회원 정보 테이블 업로드 예시입니다. 이름( name), 성별(sex), 회원유형(type_id), 아이디번호(identity), 회원번호(number), 연락처(전화번호), 정렬(sort), 회원상태(status) 입니다.

//上传excel文件
$file = Request::param(&#39;file&#39;);
//获取文件路径
$filePath = Env::get(&#39;root_path&#39;).&#39;public&#39;.DIRECTORY_SEPARATOR.$file;
if($filePath == &#39;&#39;){
    return [&#39;res&#39;=>0,&#39;msg&#39;=>&#39;你上传的文件为空&#39;];
}
$suffix = $this->DbSy->GetFileExt($file);
//判断哪种类型
if($suffix=="xlsx"){
    $reader = \PHPExcel_IOFactory::createReader(&#39;Excel2007&#39;);
}else{
    $reader = \PHPExcel_IOFactory::createReader(&#39;Excel5&#39;);
}
//载入excel文件
$excel = $reader->load("$filePath",$encode = &#39;utf-8&#39;);
//读取第一张表
$sheet = $excel->getSheet(0);
//获取总行数
$row_num = $sheet->getHighestRow();
//获取总列数
$col_num = $sheet->getHighestColumn();
$time = time();
$data = []; //数组形式获取表格数据
$count = 0;
$total = 0;
$error_count = 0;
for ($i = 2; $i <= $row_num; $i ++) {
    $type_id = Request::param(&#39;type_id&#39;);
    $data[&#39;type_id&#39;] = $type_id;
    $name = $sheet->getCell("A".$i)->getValue();
    $sex = $sheet->getCell("B".$i)->getValue();
    $identity = $sheet->getCell("C".$i)->getValue();
    $telephone = $sheet->getCell("F".$i)->getValue();
    $data[&#39;sort&#39;] = $this->DbSy->getSort(5,&#39;sort desc&#39;,array(&#39;type_id&#39;=>$type_id));
    if(!$identity){
        return [&#39;res&#39;=>0,&#39;msg&#39;=>&#39;身份证号不能为空&#39;];
    }
    $data[&#39;identity&#39;] = $identity;
    if(!$name){
        return [&#39;res&#39;=>0,&#39;msg&#39;=>&#39;姓名不能为空&#39;];
    }
    $data[&#39;name&#39;] = $name;
    if($sex==&#39;男&#39;){
        $data[&#39;sex&#39;] = 1;
    }elseif ($sex==&#39;女&#39;){
        $data[&#39;sex&#39;] = 2;
    }else{
        $data[&#39;sex&#39;] = 3;
    }
    $data[&#39;identity&#39;] = $identity;
    $data[&#39;number&#39;] = $this->DbSy->getNumber(5,&#39;sort desc&#39;,array(&#39;type_id&#39;=>$type_id));
   
    if($telephone){
        $data[&#39;telephone&#39;] = $telephone;
    }else{
        $data[&#39;telephone&#39;] = &#39;&#39;;
    }
    $data[&#39;status&#39;] = 5;
    $member = $this->DbSy->FindWhere(5,array(&#39;name&#39;=>$name,&#39;identity&#39;=>$identity,&#39;type_id&#39;=>$type_id));
    if($member){
        /*$data[&#39;updatetime&#39;] = time();*/
        $info = $this->DbSy->editContent(5,$data,array(&#39;id&#39;=>$member[&#39;id&#39;]));
        if($info){
            $total++;
        }
    }else{
        // 读取单元格
        $data[&#39;addtime&#39;] = time();
        $data[&#39;updatetime&#39;] = time();
        $info = $this->DbSy->insertGetId(5,$data);
        if($info){
            $count++;
        }else{
            $error_count++;
        }
    }
}
$msg =  "成功导入".$count."条数据,重复".$total."条数据,导入失败".$error_count."条数据";
if($count > 0){
    return [&#39;res&#39;=>1,&#39;msg&#39;=>$msg];
}else{
    return [&#39;res&#39;=>0,&#39;msg&#39;=>$msg];
}

위는 TP5.1+PHPExcel을 사용하여 정보를 가져오는 모든 과정에 대한 편집자의 요약입니다. 모든 분들께 도움이 되기를 바랍니다.


위 내용은 ThinkPhp5.1 + PHPExcel 프로덕션 데이터 가져오기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.