Java excel导入
今天做了一个从Excel导入数据,一点东西捣鼓了好久,还是在百度和同事的帮助下……好惭愧啊……
所用jar:poi-3.9.jar;
所用框架:springMVC
代码如下:
jsp:
<form name="userInfo" action="${ctx}/xxx/inserFromExcel.action" method="post" enctype="multipart/form-data">
<input type="file" id="excelFile" name="excelFile"/>
<input type="submit" id="ok" value="导入Excel"class="button3" />
</form>
action:
@RequestMapping("inserFromExcel.action")
public String insertFromExcel(MultipartFile excelFile){
logger.debug("=============="+excelFile.getOriginalFilename() );
fService.insertFromExcel(excelFile);
return "redirect:/freight/searchFreight.action";
}
sevice:调用 不要忘记提交事务
dao:
@Override
public void insertFromExcel(MultipartFile excelPath) {
try {
System.out.println(excelPath);
// 创建对Excel工作簿文件的引用
Workbook wookbook=null;
InputStream is= excelPath.getInputStream();
try{
wookbook=new XSSFWorkbook(is);
}catch (Exception e)
{
wookbook = new HSSFWorkbook(is);
}
// 在Excel文档中,第一张工作表的缺省索引是0
// 其语句为:HSSFSheet sheet = workbook.getSheetAt(0);
Sheet sheet = wookbook.getSheet("Sheet1");
// 获取到Excel文件中的所有行数
int rows = sheet.getPhysicalNumberOfRows();
// 遍历行
for (int i = 1; i < rows; i++) {
// 读取左上端单元格
Row row = sheet.getRow(i);
// 行不为空
if (row != null) {
// 获取到Excel文件中的所有的列
int cells = row.getPhysicalNumberOfCells();
String value = "";
// 遍历列
for (int j = 0; j < cells; j++) {
// 获取到列的值
Cell cell = row.getCell(j);
if (cell != null) {
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_FORMULA:
break;
case HSSFCell.CELL_TYPE_NUMERIC:
value += cell.getNumericCellValue() + ",";
break;
case HSSFCell.CELL_TYPE_STRING:
value += cell.getStringCellValue() + ",";
break;
default:
value += "0";
break;
}
}
}
// 将数据插入到数据库中
String[] val = value.split(",");
FreightEntity entity = new FreightEntity();
entity.setProductCode(val[0]);
entity.setProductName(val[1]);
entity.setOrg(val[2]);
entityManager.merge(entity);
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
protected static String convert(String temp){
temp = temp.substring(0, temp.length()-2);
//excel是以1990年为基数的,而java中的date是以1970年为基数的。所以要扣除差 25569天
Date d = new Date((Long.valueOf(temp) - 25569) * 24 * 3600 * 1000);
DateFormat formater = new SimpleDateFormat("yyyy-MM-dd");
return formater.format(d);
}
中间遇到的问题:
1.不能直接获取路径
可能是考虑到安全性的问题 除IE外都不能获取到本地的绝对路径
2.enctype="multipart/form-data" 它的意思是以二进制的数据格式来传输,所以我之前一直取不到值
3. 对应的方法的参数应该为MultipartFile类型
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。