phpExcel和jquery实现excel文件导入

前端导入插件:webuploader

webuploader使用:使用Web Uploader文件上传需要引入三种资源:JS, CSS, SWF。

其中css文件、js文件均可以根据需求修改

下载地址:https://github.com/fex-team/webuploader/releases

前端js:

 function importExcel() {
        var tabId = '';
        var code = '';
        var uploader = WebUploader.create({
            auto: true,

        /*formData: {  //设置传递的参数
                page: pageName(),
                code: 'OPFS_RuleArp_Import',
                tabId: ''
            },*/
            server: 'taskDispatch.php',   //后台处理
            swf: 'assets/plugins/webUploader/Uploader.swf',  //swf文件路径
            pick: {   //选择文件的按钮
                id:'#picker',
                multiple: false

            },
            resize: false,  //是否压缩
            accept: {   //上传的文件类型
                title: 'Applications',
                extensions: 'xls',
                mimeTypes: 'application/xls'
            },
            fileNumLimit: 1,
            fileSingleSizeLimit: 10485760,
            duplicate: true     //重复上传
        });
        uploader.on( 'uploadBeforeSend', function(file, data) {   //上传开始前
            var tabId = '';   //tab选项卡
            $(".tab-content div").each(function () {
                if($(this).hasClass('active')) {
                    tabId = $(this).attr('id');
                }
            });
            var code = '';
            if (tabId == 'IP黑名单') {
                code="OPFS_RuleIpBl_Import";
            }
            if (tabId == 'IP用户自定义') {
                code="OPFS_RuleIpAu_Import";
            }
            // 修改data可以控制发送哪些携带数据。
            data.tabId = tabId;
            data.code = code;
            data.page = pageName();
        });
        var $list = $("#thelist");
        uploader.on( 'fileQueued', function(file) {  //上传文件队列
            document.getElementById('fileAddr').value = file.name;
            $list.append( '<div id="' + file.id + '" class="item">' +
                '<p class="state" style="font-size: 14px; text-align: center">等待上传...</p>' +
                '</div>' );
            $('#closeBtn').attr('disabled',"true");
            uploader.disable();  //上传过程中,不可再次点击上传
        });
        uploader.on("uploadAccept", function( file, data) {  //返回是否成功上传,需要在后台给出上传成功与否的标记
            if (data[0] == 0) {
                // for(var j=1, len = data.length; j<len; j++)
                mizhu.alert('提示', data[1]);
                return false;
            } else{
                return true;
            }
        });
        // 文件上传过程中创建进度条实时显示。
        uploader.on('uploadProgress', function( file, percentage ) {  //进度条函数
            var $li = $('#'+file.id ),
                $percent = $li.find('.progress .progress-bar');
            // 避免重复创建
            if (!$percent.length) {
                $percent = $('<div class="progress progress-striped active">' +
                    '<div class="progress-bar" role="progressbar" style="width: 0%">' +
                    '</div>' +
                    '</div>').appendTo( $li ).find('.progress-bar');
            }
            $('#'+file.id).find('p.state').text('上传中');
            $percent.css( 'width', percentage*100 + '%' );
            console.log(percentage);
        });
        uploader.on( 'uploadSuccess', function(file) { //上传成功的回调函数
            var tabId = '';
            $(".tab-content div").each(function () {
                if($(this).hasClass('active')) {
                    tabId = $(this).attr('id');
                }
            });
            $('#'+file.id).find('p.state').text('已完成');
            if (tabId == 'IP黑名单') {
                refreshBl();
            }
            if (tabId == 'IP用户自定义') {
                refreshUser();
            }
        });
        uploader.on( 'uploadError', function(file) {
            $('#'+file.id).find('p.state').text('上传出错');
        });
        // 完成上传完了,成功或者失败,先删除进度条。
        uploader.on('uploadComplete', function (file) {
            $('#' + file.id).find('.progress').fadeOut();
            setTimeout(function () {
                $('#'+file.id).find('p.state').fadeOut();
            },3000);
            $('#closeBtn').removeAttr("disabled");
        });
        $("#closeBtn").click(function () {
            uploader.destroy();
        });
    }

php处理函数

function importExcel($db_keys) {  //$db_keys是数据库中表格的列
    $len = count($db_keys); 
    $filename = $_FILES['file']['name'];// 文件名
    $tmp_name = $_FILES['file']['tmp_name'];  //临时文件路径
    $extend = strrchr ($filename,'.');
    $extendLower = strtolower($extend);  //文件后缀
    /*判别是不是.xls文件*/
    if ($extendLower != ".xls")
    {
        echo '不是.xls文件,请重新上传!';
        exit;
    }
    //文件存放的路径
    if (!move_uploaded_file($tmp_name, PATH_IMPORT.$filename)) {
        $error = "error|上传文件错误.";
        exit(0);
    }
    //获取上传表格的数据
    $file_path = PATH_IMPORT.$filename;  //自行设置PATH_IMPORT
    $objReader = PHPExcel_IOFactory::createReader('Excel5');
    $objPHPExcel = $objReader->load($file_path );
    $sheet = $objPHPExcel->getSheet();
    $highestRow = $sheet->getHighestDataRow(); // 取得总行数
    $highestColumn_num = PHPExcel_Cell::columnIndexFromString($sheet->getHighestDataColumn()); //列数
    $columns = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O');
    $column_name = array();
    $title = $sheet->getTitle(); //获取sheet名
    $arr_result = array();
    $dealer_element = array();
    $data = array();
    //在$arr_result的第一个位置放置标志字段,1成功执行,0上传错误
    $arr_result[] = 1;
    $dealer_element[0] = 1;

for ($j = 2, $i=1; $j <= $highestRow; $j++, $i++) {
        for ($k = 0; $k < $highestColumn_num; $k++) {

               //读取单元格
            $value = $objPHPExcel->getActiveSheet()->getCell($columns[$k] . $j)->getValue();//这个就是获取每个单元格的值
           // $value = trim($value);
            if (empty($value)) {
                $value = NULL;
            }

          $data[$db_keys[$k]] = $value; //$data键值对数组
          $arr_result[$j - 1] = $data;  //$arr_result是下标数组

}

//此处可进行数据验证

}

 return  $arr_result;
}

xls文件中的数据已经存储在 $arr_result中了,只需要调用插入函数即可。

猜你喜欢

转载自blog.csdn.net/Sunshine_366/article/details/81209430