一、環境說明
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 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 = https://www.cnblogs.com/xusx2014/p/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
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/107479.html
標籤:PHP
上一篇:簡單的權限管理php
下一篇:MySQL鎖會不會,你就差看一看
