Excel表格导入数据库数据(用upload实现)
前端页面
1:导包
src="${pageContext.request.contextPath }/js/jquery.ocupload-1.1.2.js"></script>
2:一件上传Excel表格代码
name: 'uploadFile', // <input name="file" />
action: '${pageContext.request.contextPath }/workordermanageAction_batchImport.action', // 提交请求action路径
//enctype: 'multipart/form-data', // 编码格式
autoSubmit: true, // 选中文件提交表单
onComplete: function(response) {
if(response=="success"){
$.messager.alert("提示信息","数据导入成功!","info");
//$("#grid").datagrid("reload");
}else{
$.messager.alert("错误提示","数据导入失败","error");
}
}// 请求完成时 调用函数
});
后台Action代码
1:配置struts
<action name="workordermanageAction_*" class="workordermanageAction" method="{1}">
<result name="list">/WEB-INF/pages/qupai/quickworkorder.jsp</result>
</action>
2:action代码
private File uploadFile;
public void setUploadFile(File uploadFile) {
this.uploadFile = uploadFile;
}
//工作单批量导入
@SuppressWarnings("deprecation")
public String batchImport() throws IOException{
String response = "success";//定一个返回结果
//解析excel 目的:将获取的数据存入数据库
System.out.println(uploadFile);
try {
//将upload加载到Workbook对象 相当于一个Excel
Workbook hb = new XSSFWorkbook(new FileInputStream(uploadFile));
//获取sheet 根据名称获取sheet
//Sheet sheet = hb.getSheet("Sheet1");
Sheet sheetAt = hb.getSheetAt(0);
//定一个list存放Work对象
List<Workordermanage> list = new ArrayList<>();
//获取行
for (Row row : sheetAt) {
int rownum = row.getRowNum();
if(rownum == 0){
continue;
}
//获取每一列数据
String id = row.getCell(0).getStringCellValue();//id
String product =row.getCell(1).getStringCellValue();//产品
row.getCell(2).setCellType(HSSFCell.CELL_TYPE_STRING);
String prodtimelimit = row.getCell(2).getStringCellValue();//时限
String prodtype =row.getCell(3).getStringCellValue();//产品类型
String sendername =row.getCell(4).getStringCellValue();//发件人姓名
row.getCell(5).setCellType(HSSFCell.CELL_TYPE_STRING);
String senderphone = row.getCell(5).getStringCellValue();//发件人手机号码
String senderaddr =row.getCell(6).getStringCellValue();//发件人地址
String receivername =row.getCell(7).getStringCellValue();//收件人姓名
row.getCell(8).setCellType(HSSFCell.CELL_TYPE_STRING);
String receiverphone = row.getCell(8).getStringCellValue();
String receiveraddr =row.getCell(9).getStringCellValue();//收件人地址
row.getCell(10).setCellType(HSSFCell.CELL_TYPE_STRING);
String actlweit =row.getCell(10).getStringCellValue();//实际重量
//强转成数据库需要的类型
Double Dactlweit = Double.valueOf(actlweit);
//封装对象
Workordermanage workordermanage =
new Workordermanage(id, null,null,null,
null, null, prodtimelimit, prodtype,
sendername, senderphone, senderaddr, receivername,
receiverphone, receiveraddr, null, Dactlweit, null, null, null);
//多个对象用list存储
list.add(workordermanage);
}
//存数据库
workordermanageService.save(list);
//关流
hb.close();
} catch (Exception e) {
e.printStackTrace();
response= "fail";
}
ServletActionContext.getResponse().setContentType("text/html;charset=UTF-8");
ServletActionContext.getResponse().getWriter().print(response);
return NONE;
}
excel数据[^footnote].
附录[^footnote].
HSSF - 提供读写Microsoft Excel格式档案的功能。
XSSF - 提供读写Microsoft Excel OOXML格式档案的功能。
HWPF - 提供读写Microsoft Word格式档案的功能。
HSLF - 提供读写Microsoft PowerPoint格式档案的功能。
HDGF - 提供读写Microsoft Visio格式档案的功能。
注意[^footnote].
当数据不是excel数据不是string类型的,要转成string类型,才能被读出来
row.getCell(5).setCellType(HSSFCell.CELL_TYPE_STRING);
String senderphone = row.getCell(5).getStringCellValue();
</action>