对于excel文件的导入导出,后台接收读取和建表封存都是固定死的,所以对于excel导入时,excel文件内容必须匹配后台相关对象,不然报错。

  excel文件导出,用<a><a/>标签即可,通过后台去完成 ,不可用ajax去写导出,ajax请求只是个“字符型”的请求,即请求的内容是以文本类型存放的。

文件的下载是以二进制形式进行的,ajax没法解析后台返回的文件流,所以无法处理二进制流response输出来下载文件。

当获取前台导入这个命令后,会通过Mybatis获取mysql数据库所有相关数据,通过for循环将获取集合中一个个对象及对象属性写入表中,导出。

  对于excel文件的导入则是可以通过form表单和ajax两种方法导入,前者在controller控制器里面返回字符串,会直接显示在页面上,需要手动重新刷新页面。

后者……,虽然很想使用,但网上并没有找到有关纯ajax写入后台的案例,不过有几类别人封装好的ajax插件用于写入excel文件的,有兴趣可以去找找。

文件上传,控制台获取到文件,读取文件里面value值,封存到其对象中,通过Mybatis保存数据库中。(UPDATE good SET g_id = UUID(),mybatis添加对象时uuid为主键,只要mysql主键为String类型长度足够容纳uuid自动生成长度)

<!-- html -->
<!-- excel文件导出 -->
<p><a href="${pageContext.request.contextPath}/user/exportExcel">导出</a>
<!-- excel文件导入 -->
<form action="${pageContext.request.contextPath}/user/importExcel" method="post" enctype="multipart/form-data">
<input type="file" name="userExcel" />
<input type="submit" value="导入">
</form>
//控制层
//导出excel文档
@RequestMapping("/exportExcel")
@ResponseBody
public void exportExcel(HttpServletRequest request,HttpServletResponse response){
try {
//获取数据源
List<User> userList = userService.queryUserAll(); //导出excel
response.setHeader("Content-Disposition","attachment;filename="+new String("用户信息.xls".getBytes(),"ISO-8859-1"));
response.setContentType("application/x-excel;charset=UTF-8");
OutputStream outputStream = response.getOutputStream();
//导出
userService.exportExcel(userList,outputStream);
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
//导入
@RequestMapping("/importExcel")
//@ResponseBody
public String importExcel(MultipartFile userExcel,HttpServletRequest request,HttpSession session){
if(userExcel == null){
session.setAttribute("excelName", "未上传文件,上传失败!");
return "redirect:queryUserAll";
}
String userExcelFileName = userExcel.getOriginalFilename();
if(!userExcelFileName.matches("^.+\\.(?i)((xls)|(xlsx))$")){
session.setAttribute("excelName", "文件格式不正确!请使用.xls或.xlsx后缀的文档,导入失败!");
return "redirect:queryUserAll";
}
//导入
try {
userService.importExcel(userExcel);
} catch (IOException | InvalidFormatException e) {
e.printStackTrace();
}
session.setAttribute("excelName", "导入成功!");
return "redirect:queryUserAll";
}
//service层
//导出
@Override
public void exportExcel(List<User> userList, OutputStream outputStream) throws IOException {
//1.创建工作簿
HSSFWorkbook hwb =new HSSFWorkbook();
//1.1创建合并单元格
//CellRangeAddress cellRangeAddress =new CellRangeAddress(0,0,0,4);
//2.创建工作表
HSSFSheet sheet = hwb.createSheet("用户信息表");
//2.1添加合并单元格
//sheet.addMergedRegion(cellRangeAddress);
//3.1创建第一行及单元格
HSSFRow row1 = sheet.createRow(0);
HSSFCell cell1 = row1.createCell(0);
cell1.setCellValue("用户信息");
//3.2创建第二行及单元格
HSSFRow row2 = sheet.createRow(1);
String[] row2Cell = {"编号","姓名","性别","年龄","部门名称"};
for (int i =0 ; i < row2Cell.length ; i++ ){
row2.createCell(i).setCellValue(row2Cell[i]);
}
//3.3创建第三行及单元格
if(userList!= null && userList.size()>0){
for(int j=0 ; j<userList.size() ;j++){
HSSFRow rowUser = sheet.createRow(j+2);
rowUser.createCell(0).setCellValue(userList.get(j).getId());
rowUser.createCell(1).setCellValue(userList.get(j).getName());
rowUser.createCell(2).setCellValue(userList.get(j).getSex());
rowUser.createCell(3).setCellValue(userList.get(j).getAge());
//rowUser.createCell(4).setCellValue(userList.get(j).getId());
}
}
//5.输出
hwb.write(outputStream);
}

  

//导入
@Override
public void importExcel(MultipartFile userExcel) throws IOException, InvalidFormatException {
//获取输入流
InputStream inputStream = userExcel.getInputStream();
//创建读取工作簿
Workbook workbook = WorkbookFactory.create(inputStream);
//获取工作表
Sheet sheet = workbook.getSheetAt(0);
//获取总行
int rows=sheet.getPhysicalNumberOfRows();
if(rows>2){
//获取单元格
for (int i = 2; i < rows; i++) {
Row row = sheet.getRow(i);
User user =new User(); try {
String id = row.getCell(0).getStringCellValue();
user.setId(Integer.parseInt(id));
} catch (IllegalStateException e) {
int id=(int)row.getCell(0).getNumericCellValue();
user.setId(id);
} String name = row.getCell(1).getStringCellValue();
user.setName(name); String sex = row.getCell(2).getStringCellValue();
user.setSex(sex); try {
String age = row.getCell(3).getStringCellValue();
user.setAge(Integer.parseInt(age));
} catch (IllegalStateException e) {
int age=(int)row.getCell(3).getNumericCellValue();
user.setAge(age);
}
//想数据库中添加新对象
addUser(user);//方法
} } inputStream.close();
}

  

  

随机推荐

  1. C# XMLDocument

    今天开发一个WPF模块需要本地化保存一些用户设置,鉴于数据量不大,用XML. (要是再小的话可以用Resources 和 Settings). 清晰简短教程移步:http://bdk82924.ite ...

  2. MySQL(三) 数据库表的查询操作【重要】

    序言 1.MySQL表操作(创建表,查询表结构,更改表字段等), 2.MySQL的数据类型(CHAR.VARCHAR.BLOB,等), 本节比较重要,对数据表数据进行查询操作,其中可能大家不熟悉的就对 ...

  3. CSS中模拟父元素选择器

    很多情况下,我们需要找到父元素,但可惜的是css中并没有这样的一个选择器. 至于原因可以看张鑫旭的如何在CSS中实现父选择器效果这篇文章. 简单来说这个实现并不是真正的父元素选择器,只是利用其它思路来 ...

  4. AlwaysOn Group Listener

    1.Listener是什么 Listener实际上是一个 VirtualNetworkName,客户端通过这个VNN来连接的具体的sqlserver实例 .Listener包含了DNS名称,port和 ...

  5. Android编程: fragment组件、菜单和Intent组件

    学习内容:fragment组件.菜单和Intent组件 ====fragment组件====1.fragment是一种自我容纳,模块化的,嵌入在一个Activity里面的视图组件    可以在运行时动 ...

  6. 安装Numpy和matplotlib

    (1)测试程序     这是我从网上(http://www.open-open.com/lib/view/open1393488232380.html)找到的一个使用Numpy和matplotlib的 ...

  7. angularJs 页面筛选标签小功能

    页面html: <div class="bar bar-calm bar-header"> <div class="title">新闻分 ...

  8. 【BZOJ3262】陌上花开(树套树)

    [BZOJ3262]陌上花开(树套树) 题面 对于权限题,我这种苦逼肯定是从别的OJ上搞的对不对??? CJOJ 洛谷 Description 有n朵花,每朵花有三个属性:花形(s).颜色(c).气味 ...

  9. 一文看懂npm、yarn、pnpm之间的区别

    文作者对比了当前主流的包管理工具npm.yarn.pnpm之间的区别,并提出了合适的使用建议,以下为译文: NPM npm是Node.js能够如此成功的主要原因之一.npm团队做了很多的工作,以确保n ...

  10. IDEA集成的 Thrift 插件进行 thrift 编译

    IDEA集成的 Thrift 插件进行 thrift 编译 注意 1.thrift文件要放在source目录,才有compile选项 2.generator list的output path不用加包名 ...