exls导入数据库 php_Excel导入数据库(php版)

一、环境说明

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

二、前端预览

三、Excel表格

四、HTML部分

按照Excel表格模板(下载),填写资料。

上传已编辑的文件:

选择文件

type="file"

id="inputFile"

style="height:0;width:0"

accept="application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"

>

上传

五、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": [

"但秀逸",

"禹雪儿",

"果智",

"沙怡",

"岑阳秋",

"粘萌",

"兴飞兰",

"白翰飞",

"危莞尔",

"辉迎丝"

]

}

}

注意:

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值