EXCEL通过配置导入规则,实现任意格式EXCEL文件解析

本文介绍了一种适用于任意格式EXCEL文件解析的方法,通过配置导入规则实现数据库导入。虽然需要针对每张表单配置规则,但只需配置一次。文中展示了测试用的EXCEL文件,包括含有多个工作表的例子,并提及面对字段变动时,可以利用表单引擎技术进行调整。
摘要由CSDN通过智能技术生成

EXCEL文件导入到数据库,是一种常见的文件导入格式。

本文实现的EXCEL文件解析方法,优点是适合任意格式的EXCEL文件,缺点是每一张表单都需要配置对应的导入规则,在字段数量多时,配置导入规则就尴尬了,好在也只需要配置一遍。

先看效果,以下两张图是我测试的EXCEL文件,其中第二张图中,有5个工作表。这两个表单字段也会不定期变动,这就需要重新修改导入规则。(对于字段变动的问题,用到的是表单引擎技术,这里就不进行说明了)




先看导入规则表字段:

字段名称 中文名称 说明
ID 主键  
BIAODANYUID 表单域ID 导入表的字段名称;name,sex
BIAODANYUMINGCHEN 表单域名称 导入表的字段中文名;姓名,性别
EXCELLIEHAO EXCEL列号 姓名所在的列,B
EXCELHANGHAO EXCEL行号 姓名所在的行,2
SHIFUBITIANJIAOYAN 是否必填 字段必填校验
SHIFUCHONGFUJIAOYAN 是否唯一 字段唯一性校验
SHUJULEIXING 数据类型 日期类型,数值类型,字典类型,图片类型
SHUJUGESHI 数据格式 日期的格式yyyy-MM-dd,数值的格式#.0000

下面开始导入EXCEL文件了

1 JSP页面上传文件

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Excel导入</title>
<style type="text/css">
.table td, .table th {
	border: 1px solid #cad9ea;
	padding: 0 1em 0;
}

.table tr {
	height: 18px;
}

 #loading{
	 position:fixed;
	 _position:absolute;
	 top:40%;
	 left:50%;
	 width:120px;
	 height:120px;
	 overflow:hidden;
	 background:url(${root!}/static/img/importExcel/1.gif) no-repeat;
	 z-index:10;
	 display:none;
 }

</style>

</head>
<body>
	<form id="importForm" method="post" action=""
		enctype="multipart/form-data">
		
		<table width="90%" class="table" style="margin-top: 5px;">
			<tr>
				<td style="align: center;"><input id="files" name="files" type="file" multiple="multiple" class="file "></td>
			</tr>
			<tr>
				<td style="text-align: center;">
				<div style="height: 20px;">文件只限于xls,xlsx格式</div>
				<div style="height: 20px;">上传文件最大数量:${excelNumber!}</div>
				<div style="height: 20px;">上传文件总大小:${excelSize!}M</div>
				</td>
			</tr>
		</table>
		
	</form>
	
	<div id="loading"></div> 

	<script type='text/javascript'>
		 $(document).ready(function () {
	        $('#loading').hide();//隐藏loading
	    });
	
		function submit() {
			var excelNumber = "${excelNumber!}";
			var excelSize = "${excelSize!}";
			
			var filepath = $("input[name='files']").val();
			var extStart = filepath.lastIndexOf(".");
			var ext = filepath.substring(extStart, filepath.length)
					.toUpperCase();
			var fileCount = document.getElementById("importForm")["files"].files.length;
			
			if(fileCount == 0 ){
// 				window.alert('请选择上传文件!');
				layer.msg("请选择上传文件!", {icon: 2,time:1500});
				return false;
			}
			
			if (ext != ".XLS" && ext != ".XLSX") {
// 				alert("文件只限于xls,xlsx格式");
				layer.msg("文件只限于xls,xlsx格式", {icon: 2,time:1500});
				return false;
			}
			
			if (fileCount > excelNumber) {
// 				window.alert('文件数不能超过'+excelNumber+'个,你选择了' + fileCount + '个');
				layer.msg("文件数不能超过"+excelNumber+"个,您选择了" + fileCount + "个", {icon: 2,time:1500});
				return false;
			}

			var fileSize = 0;
			var i = 0;
			for (i; i < fileCount; i++) {
				fileSize = fileSize + $("#files")[0].files[i].size;
			}
			var size = fileSize / (1024 * 1024);
			if (size > excelSize) {
// 				alert("上传的文件大小不能超过"+excelSize+"M!");
				layer.msg("上传的文件大小不能超过"+excelSize+"M!", {icon: 2,time:1500});
				return false;
			}
			$( '#importForm').attr("action",Power.rootPath + "${url!}"+"?buttonName=确认导入&flag=end" );
			$("#loading").show();//显示loading
			$( '#importForm').submit();
			

		}
	</script>
</body>
</html>




2 控制层接收文件

@RequestMapping(value = "/uploadFile",  method = RequestMethod.POST)
	public String uploadFile(HttpServletRequest request,
			HttpServletResponse response, ModelMap map,
			@RequestParam(value = "files", required = true) MultipartFile[] files) {


		String appCode = approveConstant.getProperty("app.code");
		// 过滤用户所能看到的机构
		String userId = "";
		try {
			userId = getCurrentUser().get("ID");
		} catch (SessionException e1) {
			e1.printStackTrace();
		}
		PubUserOrganizatiion userOrg = userOrganizatiionService
				.getEntityByUserId(userId);
		
		try {
			String realPath = request.getRealPath("/");
			Map<S
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值