zoukankan      html  css  js  c++  java
  • Excel导入数据库(php版)

    一、环境说明

    Apache+php(PHPExcel)+HTML5+JavaScript(jQuery)+MySQL

    二、前端预览

    三、Excel表格

    四、HTML部分

    <p>按照Excel表格模板(<a href="javascript:void(0);">下载</a>),填写资料。</p>
    <p>上传已编辑的文件:</p>
    <p>
    <a href="javascript:void(0);" id="triggerInputFile">选择文件</a>
    <input
    type="file"
    id="inputFile"
    style="height:0;0"
    accept="application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
    >
    <span id="filepath"></span>
    <a class="hide" href="javascript:void(0);" id="uploadFile">上传</a>
    </p>

    五、JavaScript部分

    $(function() {
        var tipFn = function(str) {
            $('#tip').text(str);
            $('#tip').fadeIn(function() {
                setTimeout(function() {
                    $('#tip').fadeOut();
                },
                2000);
            });
        };
    
        $('#triggerInputFile').click(function() {
            $('#inputFile').click();
        });
    
        $('#inputFile').change(function() {
            var fileReader = new FileReader();
            var file = $(this).prop('files')[0];
            if (file) {
                fileReader.readAsDataURL(file);
            } else {
                tipFn('请选择文件');
                return;
            }
            fileReader.onloadend = (e) = >{
                console.log(e);
                if (file.size > 2000000) {
                    tipFn('文件大小不得超过 2 M');
                    return;
                }
                // $('#filepath').text(e.target.result);
                var fullpath = $(this).val();
                var filename = fullpath.split('\');
                $('#filepath').text(filename[filename.length - 1]);
                // C:fakepath第三部分价格表.docx
                $('#uploadFile').removeClass('hide');
            };
        });
    
        $('#uploadFile').click(function() {
            var form_data = new FormData();
            var file_data = $('#inputFile').prop('files')[0];
            form_data.append('id', 'xls_file');
            form_data.append('name', file_data.name);
            form_data.append('type', file_data.type);
            form_data.append('lastModifiedDate', file_data.lastModifiedDate);
            form_data.append('size', file_data.size);
            form_data.append('upfile', file_data);
            $.ajax({
                type: 'POST',
                url: '/excel/upload',
                dataType: 'json',
                processData: false,
                contentType: false,
                cache: false,
                data: form_data
            }).success(function(json) {
                if (json.error === 0) {
                    tipFn('文件上传成功!');
                    $('#uploadFile').addClass('hide');
                } else {
                    tipFn('文件上传失败,原因:' + json.message);
                }
            });
        });
    });

    六、PHP部分

    public function upload() {
    	//定义允许上传的文件扩展名
    	$ext_arr = array(
    	            'excel' => array('xls', 'xlsx')
    	        );
    	//最大文件大小
    	$min_size = 1;
    	$max_size = 2000000;
    	if (empty($_FILES) === false) {
    		//原文件名
    		$file_name = $_FILES['upfile']['name'];
    		//服务器上临时文件名
    		$tmp_name = $_FILES['upfile']['tmp_name'];
    		//die($tmp_name);
    		//文件大小
    		$file_size = $_FILES['upfile']['size'];
    		//检查文件名
    		if (!$file_name) {
    			$this->alert('请选择文件。');
    		}
    		//判断文件是否是通过 HTTP POST 上传的
    		if (is_uploaded_file($tmp_name) === false) {
    			$this->alert('上传失败。');
    		}
    		//检查文件大小
    		if ($file_size > $max_size) {
    			$this->alert('上传文件大小超过限制。');
    		}
    		if ($file_size < $min_size) {
    			$this->alert('上传文件大小过小。');
    		}
    		//获得文件扩展名
    		$temp_arr = explode('.', $file_name);
    		$file_ext = array_pop($temp_arr);
    		$file_ext = trim($file_ext);
    		$file_ext = strtolower($file_ext);
    		//检查扩展名
    		if (in_array($file_ext, $ext_arr['excel']) === false) {
    			$this->alert('上传文件扩展名是不允许的扩展名。\n只允许'. implode(',', $ext_arr['excel']) . '格式。');
    		}
    		$save_path = $_SERVER['DOCUMENT_ROOT'].'/upload/';
    		if (!file_exists($save_path)) {
    			mkdir($save_path, 0777, true);
    		}
    		$new_file_name = md5(uniqid(rand()));
    		$new_file_name .= '.'.$file_ext;
    		//移动文件
    		$file_path = $save_path.$new_file_name;
    		if (move_uploaded_file($tmp_name, $file_path) === false) {
    			$this->alert('上传文件失败。');
    		} else {
    			header('Content-type: text/plain; charset=UTF-8');
    			$result = $this->show_excel($file_path);
    			echo '{"error":0, "url":"/upload/'.$new_file_name.'","msg":'.$result.'}';
    			//删除本地文件
    			// $this->del_file($file_path);
    		}
    	}
    }
    private function show_excel($file_path) {
    	//Include class  
    	require_once($_SERVER['DOCUMENT_ROOT'].'/Classes/PHPExcel.php');
    	require_once($_SERVER['DOCUMENT_ROOT'].'/Classes/PHPExcel/Writer/Excel2007.php');
    	//文件的扩展名
    	$ext = strtolower(pathinfo($file_path, PATHINFO_EXTENSION));
    	// 读excel
    	if ($ext === 'xlsx') {
    		// $objReader = PHPExcel_IOFactory::createReader('Excel2007');
    		require_once($_SERVER['DOCUMENT_ROOT'].'/Classes/PHPExcel/Reader/Excel2007.php');
    		$objReader   = new PHPExcel_Reader_Excel2007;
    		$objPHPExcel = $objReader->load($file_path, 'utf-8');
    	} elseif ($ext === 'xls') {
    		// $objReader = PHPExcel_IOFactory::createReader('Excel5');
    		require_once($_SERVER['DOCUMENT_ROOT'].'/Classes/PHPExcel/Reader/Excel5.php');
    		$objReader   = new PHPExcel_Reader_Excel5;
    		$objPHPExcel = $objReader->load($file_path, 'utf-8');
    	}
    	$sheet         = $objPHPExcel->getSheet(0);
    	$highestRow    = $sheet->getHighestRow();
    	// 取得总行数
    	$highestColumn = $sheet->getHighestColumn();
    	// 取得总列数
    	$ar  = array();
    	$nar = array();
    	$i   = 0;
    	$importRows = 0;
    	for ($j = 2; $j <= $highestRow; $j++) {
    		$importRows++;
    		$realName = (string)$objPHPExcel->getActiveSheet()->getCell("A$j")->getValue();
    		//需要导入的realName
    		$phone    = (string)$objPHPExcel->getActiveSheet()->getCell("B$j")->getValue();
    		//需要导入的phone
    		$company  = (string)$objPHPExcel->getActiveSheet()->getCell("C$j")->getValue();
    		//需要导入的company
    		$job      = (string)$objPHPExcel->getActiveSheet()->getCell("D$j")->getValue();
    		//需要导入的job
    		$qq       = (string)$objPHPExcel->getActiveSheet()->getCell("E$j")->getValue();
    		//需要导入的email
    		$ret['mdata'] = 0;
    		array_push($nar, $realName);
    		// $ret['mdata'] = $this->addMemb($phone, $realName, $company, $job, $qq);     //这里就是我的数据库添加操作定义的一个方法,对应替换为自己的
    		if ($ret['mdata'] && !is_Bool($ret['mdata'])) {
    			$ar[$i] = $ret['mdata'];
    			$i++;
    		}
    	}
    	if ($i > 0) {
    		$ret['res']    = "0";
    		$ret['errNum'] = $i;
    		$ret['allNum'] = $importRows;
    		$ret['sucNum'] = $importRows - $i;
    		$ret['mdata']  = $ar;
    		$ret['msg']    = "导入完毕!";
    		return json_encode($ret);
    	}
    	$ret['res']    = "1";
    	$ret['allNum'] = $importRows;
    	$ret['errNum'] = 0;
    	$ret['sucNum'] = $importRows;
    	$ret['mdata']  = "导入成功!";
    	$ret['nar']    = $nar;
    	return json_encode($ret);
    }
    private function alert($msg='null') {
    	header('Content-type: text/plain; charset=UTF-8');
    	echo '{"error":1, "message":"'.$msg.'"}';
    	exit;
    }

    上传结果:

    {
        "error": 0,
        "url": "/upload/caeaba6fdf8106a3425aead0401d5c5c.xlsx",
        "msg": {
            "mdata": "导入成功!",
            "res": "1",
            "allNum": 10,
            "errNum": 0,
            "sucNum": 10,
            "nar": [
                "但秀逸",
                "禹雪儿",
                "果智",
                "沙怡",
                "岑阳秋",
                "粘萌",
                "兴飞兰",
                "白翰飞",
                "危莞尔",
                "辉迎丝"
            ]
        }
    }

    注意:

    请根据自身需求参考上面代码,而不要直接使用上面演示代码,这里仅提供一个简单的思路。

    来源:https://xushanxiang.com/2019/11/excel-uses-php-to-import-the-database.html

  • 相关阅读:
    Java成神之路技术整理(长期更新)
    WEB攻击手段及防御第1篇-XSS
    JSON是什么,为什么这么流行?
    常用的 7 款 MySQL 客户端工具,你值得拥有!
    Spring的核心思想,总结得非常好!
    到底什么级别才算是高并发?
    非常详尽的 Shiro 架构解析
    7 种 JVM 垃圾收集器,看完我跪了。。
    电商那些年,我摸爬打滚出的高并发架构实战干货
    Spring Boot 把 Maven 干掉了,拥抱 Gradle!
  • 原文地址:https://www.cnblogs.com/xusx2014/p/11910726.html
Copyright © 2011-2022 走看看