JSP+ajax+springMVC+MayBatis处理excel上传导入
时间:2022-04-27
本文章向大家介绍JSP+ajax+springMVC+MayBatis处理excel上传导入,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
jsp
<div class="subtext1">
<div class="rtxt">
<input id="importData" name="importData" type="file"><a href="javascript:importData();">导入</a>
</div>
</div>
jquery
//数据导入
function importData(){
var files = $('input[name="importData"]').prop('files');//获取到文件列表
if(files.length == 0){
alert('请选择文件');
return;
}else{
var formData = new FormData();
var name = $("#importData").val();
formData.append("file",$("#importData")[0].files[0]);
formData.append("name",name);
var reg = /^.*.(?:xls|xlsx)$/i;
if (!reg.test(name)) {//校验是否是excel格式的文件
alert("请上传excel格式的文件!");
return;
}
var url = "url";
$.ajax({
type : "post",
async : false,
traditional : true,
url : url,
dataType : "json",
data : formData,
processData : false,
contentType : false,
success : function(result) {
if (result.success) {
//保存刷新
//........
alert("导入成功!");
}
},
error : function(errorMsg) {
alert("导入失败!");
}
});
}
}
java
@Autowired
private IDimUserFileConfService dimUserFileConfService;
@Autowired
private IDimUserGiConfService dimUserGiConfService;
@RequestMapping(value = "importExel.json", method = RequestMethod.POST)
@ResponseBody
public Object importdata(@RequestParam("file") MultipartFile file,HttpServletRequest request, HttpServletResponse response,@RequestParam("user_id") String user_id,
@RequestParam("user_name") String user_name) {
String id = user_id+DateUtils.getDateTimeStr();
Date create_time = new Date();
String filename = file.getOriginalFilename();//原文件名字
XSSFWorkbook workbook1 = null;
HSSFWorkbook workbook2 = null;
try {
InputStream is = file.getInputStream();//获取输入流
if(filename.endsWith(".xlsx")){
workbook1 = new XSSFWorkbook(is);
XSSFSheet sheet = workbook1.getSheetAt(0); // 创建对工作表的引用
int rows = sheet.getPhysicalNumberOfRows();// 获取表格的
int columns = 0;
for (int r = 0; r < rows; r++) { // 循环遍历表格的行
if(r==0){
//在第一行标题行计算出列宽度,因为数据行中可能会有空值
columns = sheet.getRow(r).getLastCellNum();
continue;
}
String value = "";
Row row = sheet.getRow(r); // 获取单元格中指定的行对象
if (row != null) { //遍历单元格
for(int i = 0 ; i < columns; i++) {
Cell cell = row.getCell(i);
cell.setCellType(Cell.CELL_TYPE_STRING);
String temp = cell.getStringCellValue();
if (temp.indexOf(".") > -1) { //处理有小数的读取错误
value += String.valueOf(new Double(temp)).trim()+",";
} else {
value += temp.trim()+",";
}
}
}
String[] str = value.split(",");
int k = 0;
if(r % 200 == 0) {//文件拆分,每200行一个文件
k++;
id = k+user_id+DateUtils.getDateTimeStr()+"p";
//保存文件信息
dimUserFileConfService.addUserGiFile(id, filename+"_p"+k, user_id, user_name, new Date());
}
//处理用户地理信息保存
dimUserGiConfService.addUserGi(str[0], str[1], str[2], id);
}
if(!id.endsWith("p")) {
//保存文件信息
dimUserFileConfService.addUserGiFile(id, filename, user_id, user_name, create_time);
}
} else {
workbook2 = new HSSFWorkbook(is);
HSSFSheet sheet = workbook2.getSheetAt(0); // 创建对工作表的引用
int rows = sheet.getPhysicalNumberOfRows();// 获取表格的
int columns = 0;
for (int r = 0; r < rows; r++) { // 循环遍历表格的行
if(r==0){
//在第一行标题行计算出列宽度,因为数据行中可能会有空值
columns = sheet.getRow(r).getLastCellNum();
continue;
}
String value = "";
Row row = sheet.getRow(r); // 获取单元格中指定的行对象
if (row != null) { //遍历单元格
for(int i = 0 ; i < columns; i++) {
Cell cell = row.getCell(i);
cell.setCellType(Cell.CELL_TYPE_STRING);
String temp = cell.getStringCellValue();
if (temp.indexOf(".") > -1) { //处理有小数的读取错误
value += String.valueOf(new Double(temp)).trim()+",";
} else {
value += temp.trim()+",";
}
}
}
String[] str = value.split(",");
int k = 0;
if(r % 200 == 0) {//文件拆分,每200行一个文件
k++;
id = k+user_id+DateUtils.getDateTimeStr()+"p";
//保存文件信息
dimUserFileConfService.addUserGiFile(id, filename+"_p"+k, user_id, user_name, new Date());
}
//处理用户地理信息保存
dimUserGiConfService.addUserGi(str[0], str[1], str[2], id);
}
if(!id.endsWith("p")) {
//保存文件信息
dimUserFileConfService.addUserGiFile(id, filename, user_id, user_name, create_time);
}
}
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
if(workbook1 != null) {
workbook1.close();
}
if(workbook2 != null) {
workbook2.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return new RestResult<Object>(true, "ok");
}
maybatis
<!-- 导入文件 -->
<insert id="addUserGiFile">
INSERT INTO dim_user_gi_file
values
(#{id},#{f_name},#{user_id},#{user_name},#{create_time, jdbcType=DATE})
</insert>
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Tkinter Canvas
- Python实现最小二乘法
- 一个简单的例子学明白用Python插值
- python 类class基础简明笔记
- 数据离散化及其KMeans算法实现的理解
- [tensorflow损失函数系列]sparse_softmax_cross_entropy_with_logits
- 怎样将Anaconda设置为国内的镜像
- Python实现KMeans算法
- Python面向对象编程
- HTML和CSS常见问题整理
- Nginx Linux详细安装部署教程
- Linux基础知识(1)
- web 应用常见安全漏洞一览
- Web文件上传方法总结大全
- [tensorflow损失函数系列]weighted_cross_entropy_with_logits