Excel导入数据库(php版)

Posted xusx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;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": [
            "但秀逸",
            "禹雪儿",
            "果智",
            "沙怡",
            "岑阳秋",
            "粘萌",
            "兴飞兰",
            "白翰飞",
            "危莞尔",
            "辉迎丝"
        ]
    }
}

注意:

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

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

以上是关于Excel导入数据库(php版)的主要内容,如果未能解决你的问题,请参考以下文章

如何用java导入Excel数据到数据库?

如何使用 PHP 将大型 Excel 文件导入 MySql 数据库

PHP把MSSQL数据导入到MYSQL的方法

phpexcel 导入数据不能超过122条

求关于php excel导入大数据到mysql的解决办法

php语言中Excel表格导入数据库的方法详解