一、环境说明

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;width: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": [
            "但秀逸",
            "禹雪儿",
            "果智",
            "沙怡",
            "岑阳秋",
            "粘萌",
            "兴飞兰",
            "白翰飞",
            "危莞尔",
            "辉迎丝"
        ]
    }
}

注意:

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

来源: