1 .加入依赖的包,我这里使用的是maven
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.9</version>
</dependency>
2. jsp代码
3.js代码
4.开始java代码了
@RequestMapping(value = "/admin/ajaxUpBuildLoadexcel", method = {RequestMethod.GET, RequestMethod.POST })
public void importBuild(
HttpServletRequest request,HttpServletResponse response,HttpSession session,
@RequestParam(value = "managerid", defaultValue = "0") long managerid,
@RequestParam(value = "file", required = false) MultipartFile file) //名字为表单提交过来的名字,也就是前方input=file文件的名字
throws Exception {
response.setCharacterEncoding("utf-8");// 防止ajax接受到的中文信息乱码
PrintWriter out = response.getWriter();
if(file.isEmpty()){
out.print("文件不存在!");
out.flush();
out.close();
return;
}
List<TblBuildingInfo> buildDataList = new ArrayList<TblBuildingInfo>();//自定义泛型集合,用用于添加到excel读取的类容,再批量添加到数据库
TblBuildingInfo buildInfo = null;
TblManagerInfo manager = null;
int count = 0;// 楼栋导入数量
Workbook wookbook = null;
//这里一定要转换一下file类型,不然无法读取流
CommonsMultipartFile cFile = (CommonsMultipartFile) file;
DiskFileItem fileItem = (DiskFileItem) cFile.getFileItem();
InputStream inputStream = null;
try
{
//获取一个绝对地址的流
inputStream=fileItem.getInputStream();
}
catch(Exception e)
{
e.printStackTrace();
}
try
{
//2003版本的excel,用.xls结尾
wookbook = new HSSFWorkbook(inputStream);//得到工作簿
}
catch (Exception ex)
{
try
{
//2007版本的excel,用.xlsx结尾
wookbook = new XSSFWorkbook(inputStream);//得到工作簿
} catch (IOException e)
{
e.printStackTrace();
}
}
// 得到一个工作表
Sheet sheet = wookbook.getSheetAt(0);
// 获得表头
Row rowHead = sheet.getRow(0);
// 获得数据的总行数
int totalRowNum = sheet.getLastRowNum();
// 获得所有数据
for (int i = 1; i <= totalRowNum; i++) {
// 获得第i行对象
Row row = sheet.getRow(i);
//这里判断每一行的列数是不是等于3
if(row.getPhysicalNumberOfCells()!=3)//每一行得到列数
continue;
HSSFDataFormatter dataFormatter = new HSSFDataFormatter();//设置读取小数为整数
// 获得获得第i行第0列的 String类型对象
Cell cell = row.getCell((short) 0);//第一列
if(cell.toString().trim().equals("")||cell==null)continue;//判断每一列是否为空
buildInfo = new TblBuildingInfo();
buildInfo.setBuildname(cell.toString());
cell = row.getCell((short) 1);
buildInfo.setUnitnum(Integer.parseInt(cell.toString()));
cell = row.getCell((short) 2);
if(cell.toString().trim().equals("")||cell==null)continue;
buildInfo.setVid(cell.toString());
//添加到集合
buildDataList.add(buildInfo);
}
if (buildDataList != null && buildDataList.size() > 0) {
if (buildDataList.size() > 3000) {
out.print("很抱歉,您本次导入的楼栋数是" + buildDataList.size()+ ",系统目前最大支持导入3000条数据!");
out.flush();
out.close();
inputStream.close();
return;
}
manager = (TblManagerInfo) baseService.findById(TblManagerInfo.class, managerid);
if (manager != null) {
// 批量插入数据库
count = houseService.exportBuildData(manager,buildDataList);
} else {
out.print("管理员不存在!");
out.flush();
out.close();
inputStream.close();
return;
}
}
buildDataList = null;
manager = null;
out.print("导入成功!本次共导入楼栋" + count +"栋");
out.flush();
out.close();
}
5.excel模版