可能很多开发者会面对客户这样的需求,在未使用系统之前,他们很多数据都是保存在Word或者Excel等一些电子表格中,现在他们需要将原来的数据自动导入到系统中去,而不是一条一条地手工录入。我就碰到了这样的需求,经过一番折腾之后,终于实现了,我是采用第三方控件JXL实现的,原理是比较简单的。下面是详细的代码:
01.try
02. {
03. //实例化一个工作簿对象
04. Workbook workBook=Workbook.getWorkbook(new File("F://qzlx.xls"));
05. //获取该工作表中的第一个工作表
06. Sheet sheet=workBook.getSheet(0);
07. //获取该工作表的行数,以供下面循环使用
08. int rowSize=sheet.getRows();
09. for(int i=0;i<rowSize;i++)
10. {
11. //编号
12. String id=sheet.getCell(0,i).getContents();
13. //转来单位及文号
14. String turn_unit=sheet.getCell(1,i).getContents();
15. //来信人姓名
16. String reg_name=sheet.getCell(2,i).getContents();
17. //来信人单位或住址
18. String reg_unit=sheet.getCell(3,i).getContents();
19. //来信内容
20. String reg_content=sheet.getCell(4,i).getContents();
21. //来信日期
22. Date reg_time = java.sql.Date.valueOf(sheet.getCell(5,i).getContents());
23. //信访事项发生地或单位
24. String reg_eventUnit=sheet.getCell(6,i).getContents();
25. //处理情况
26. String do_case=sheet.getCell(7,i).getContents();
27. //处理日期
28. Date do_time=java.sql.Date.valueOf(sheet.getCell(8,i).getContents());
29. //问题归类
30. String problem_type=sheet.getCell(9,i).getContents();
31. //问题所属系统
32. String problem_system=sheet.getCell(10,i).getContents();
33. //督办时间及文号
34. String wenhao=sheet.getCell(11,i).getContents();
35. //经办人
36. String processor=sheet.getCell(12,i).getContents();
37. //备注
38. String remark=sheet.getCell(13,i).getContents();
39. LcTOldRegServiceImpl regService=new LcTOldRegServiceImpl();
40. LctOldReg reg=new LctOldReg(id,turn_unit,reg_name,reg_unit,reg_time,do_time,wenhao,problem_system,problem_type,reg_eventUnit,remark,reg_content,processor,do_case);
41. //执行保存数据到数据库语句…….
42. regService.add_qzlx(reg);
43. System.out.print("已成功导入第"+id+"条纪录");
44. }
45. return mapping.findForward("import_success");
46. }
47. catch(Exception ex)
48. {
49. System.out.print(ex.getMessage());
50. return mapping.findForward("import_faile");
51. }
有几个需要注意的地方说一下:
一是在使用JXL控件之前,需要将jxl.jar添加到工程中,而且jxl.jar要是最新的版本,如果版本很旧的话,会造成它跟JDK不兼容的问题.
二是要导入的Excel表单元格中不能存在排序,筛选,错误检查,数据有效性检查等符号,如果有则要在导入前,先去掉这些符号。
三就是注意单元列的数据类型,以便在处理时匹配我们规定的数据类型。
这里我只是演示读取Excel表数据,然后插入到数据库,当然它还可以对Excel执行写,删除操作。