我们要导入这个Excel文件到我们的系统中:
确切的说,是我们要将excel中的数据导入到数据库中保存起来
我们的操作过程:
1、获取excel文件
2、导入
2.1、读取工作簿
2.2、读取工作表
2.3、读取行
2.4、读取单元格
2.5、保存用户
下面我们来进行具体的实现工作
我们在用户列表的jsp页面中可以看到还有一个“导出”的按钮,
- <input type="button" value="导出" class="s_button" onclick="doExportExcel()"/>
- <input name="userExcel" type="file"/>
- //导入列表
- function doImportExcel(){
- document.forms[0].action="${basePath}tax/user_importExcel.action";
- document.forms[0].submit();
- }
我们在UserAction中添加importExcel导出方法:
- //前面要价这三个属性,以及get和set方法(struts的自动注入)
- private File userExcel;
- private String userExcelContantType;
- private String userExcelFileName;
- //导入用户列表
- public String importExcel(){
- //1、获取excel文件
- if(userExcel !=null){
- //是否是excel
- if(userExcelFileName.matches("^.+\\.(?i)((xls)|(xlsx))$")){
- //2、导入
- userService.importExcel(userExcel,userExcelFileName);
- }
- }
- return "list";
- }
我们在userService接口中添加importExcel导出方法,然后在userServiceImpl中实现这个方法:
- @Override
- public void importExcel(File userExcel, String userExcelFileName) {
- try {
- FileInputStream fileInputStream = new FileInputStream(userExcel);
- //判断是否是03版本的Excel(还是07的)
- boolean is03Excel = userExcelFileName.matches("^.+\\.(?i)(xls)$");
- //1、读取工作簿
- Workbook workbook = is03Excel ? new HSSFWorkbook(fileInputStream)
- : new XSSFWorkbook(fileInputStream);
- //2、读取工作表
- Sheet sheet=workbook.getSheetAt(0);
- //3、读取行
- if(sheet.getPhysicalNumberOfRows()>2){
- User user=null;
- for (int i = 2; i < sheet.getPhysicalNumberOfRows(); i++) {
- //4、读取单元格
- Row row=sheet.getRow(i);
- user=new User();
- //用户名
- Cell cell1=row.getCell(0);
- user.setName(cell1.getStringCellValue());
- //账号
- Cell cell2=row.getCell(1);
- user.setAccount(cell2.getStringCellValue());
- //所属部门
- Cell cell3=row.getCell(2);
- user.setDept(cell3.getStringCellValue());
- //性别
- Cell cell4=row.getCell(3);
- user.setGender(cell4.getStringCellValue().equals("男"));
- //电子邮箱
- Cell cell5=row.getCell(4);
- user.setEmail(cell5.getStringCellValue());
- //导入用户的初始密码为123456
- user.setPassword("123456");
- //默认用户状态为有效
- user.setState(User.USER_STATE_VALID);
- //5、保存用户
- userDao.save(user);
- }
- }
- workbook.close();
- fileInputStream.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
之前的用户列表只有四个人:
然后我们点击导入,并导入我们准备好的导入文件:
点击确定之后,发现列表中多了我们之前导入的数据:
说明我们的导入方法完成!