Java批量导入EXCEL数据

Java批量导入EXCEL数据
有些时候项目只是需要批量导入数据,这个时候就得使用程序遍历导入。因为这个只是一个类似于工具类,所以没必要整合到SpringBoot项目里面。类似这个demo一样的工具程序我们可以写在src下的test目录下。

首先是获取excel内容,遍历excel以及获取单元格对象用POI的apache提供的专门处理office的工具类

这里说一下excel的格式,.xls用HSSWorkBook接收输入流,如果是.xlsx就用XSSWorkBook接收输入流,想两者兼容可以加一个检验,或文件名再检验是否包含.xls还是.xlsx

还有一点要注意的是,单元格如果是数字,获取单元格内容的方法getValue会进行精度处理。例如100会变成100.0,如果你不想它转化可以在转化成字符串的时候再截取一下。

下面附上代码:public List<Map<String,Object>> importShouldPayBill(MultipartFile upLoadFile)throws Exception{
String fileName=upLoadFile.getOriginalFilename();
String format=fileName.substring(fileName.lastIndexOf("."));
InputStream inputStream = upLoadFile.getInputStream();
Sheet sheet=null;
if(format.equals(".xls")){
HSSFWorkbook hwb=new HSSFWorkbook(inputStream);
sheet=hwb.getSheetAt(0);
}else if(format.equals(".xlsx")){
XSSFWorkbook hwb=new XSSFWorkbook(inputStream);
sheet=hwb.getSheetAt(0);
}
if(sheet==null){
throw buileSmartExceptionFactory.getInstance(ManagesystemErrorMsg.FILE_NOT_CONTENT);
}
List<Map<String,Object>>list=new ArrayList<>();
List<String>headList=new ArrayList<>();
for(int rowNumb=0;rowNumb<=sheet.getLastRowNum();rowNumb++){
Row hssfRow=sheet.getRow(rowNumb);
if(hssfRow==null){
continue;
}
Map<String,Object>map=new LinkedHashMap<>();
for (int cellNum=0;cellNum<=hssfRow.getLastCellNum();cellNum++){
Cell hssfCell=hssfRow.getCell(cellNum);
if(hssfCell==null||"".equals(String.valueOf(hssfCell))){
continue;
}
if(rowNumb==0){
headList.add(String.valueOf(getValue(hssfCell)));
//校验表头格式
}else{
map.put(headList.get(cellNum),getValue(hssfCell));
}
}
if(!"楼栋".equals(headList.get(0))||!"房屋".equals(headList.get(1))){
throw buileSmartExceptionFactory.getInstance(ManagesystemErrorMsg.FILE_FAIL_FORMAT);
}
list.add(map);
}
inputStream.close();
list.remove(0);
return list;
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • C++ list的基本操作和使用 Lists将元素按顺序储存在链表中. 与 向量(vectors)相比, 它允许快...
    金色888阅读 1,571评论 0 0
  • C++中引用(&)的用法和应用实例 对于习惯使用C进行开发的朋友们,在看到c++中出现的&符号,可能会犯迷糊,因为...
    金色888阅读 1,387评论 0 0
  • public static void main(String[] args) { Map map1 =new Ha...
    梦想_15eb阅读 3,017评论 0 0
  • 嵌入式系统STM32F4开发实验 #以购买STM32F4时附赠的资料为基础 ———————————————————...
    杯莫停_9554阅读 3,342评论 0 0
  • 第一次在简书留下文字,瞬间有种当作家的错觉,哈哈哈哈…… 话说跟长投相遇是在一个非常抑郁的日子,看到一篇文章,关于...
    伍佩阅读 1,868评论 0 11

友情链接更多精彩内容