后台导入excel数据

		<dependency>  
		 <groupId>org.apache.poi</groupId>  
		 <artifactId>poi-ooxml</artifactId>  
		 <version>3.9</version>  
		</dependency>

还是使用poi-ooxml,可以解析xls和xlsx两种文件。

前台使用<input type="file"/>,form表单提交,

或者使用formData用ajax提交(注意$.ajax加上 processData: false,contentType: false两个属性),

注意form 的属性enctype="multipart/form-data"

然后后台用MultipartFile 的类来接受,基本上上传文件的都是用这个类,至于原因我也不是很清楚

拿到文件后接着生成workbook

	public static Workbook readExcel(MultipartFile file) throws IOException {
		Workbook wb = null;
		String filePath = file.getOriginalFilename();
		if(filePath.lastIndexOf(".") < 0)
			return wb = null;
		String extString = filePath.substring(filePath.lastIndexOf("."));
    	InputStream is = file.getInputStream();
        if(".xls".equals(extString)){
            return wb = new HSSFWorkbook(is);
        }else if(".xlsx".equals(extString)){
            return wb = new XSSFWorkbook(is);
        }else{
            return wb = null;
        }
	}

通过判断后缀名生成不同的Workbook

生成Workbook后就可以拿到表格的数据了

Workbook wb = ExcelUtils.readExcel(file);
Sheet sheet = wb.getSheetAt(0);//excel的分页
//获取最大行数
int rownum = sheet.getPhysicalNumberOfRows();
//获取第一行
Row row = sheet.getRow(0);
//获取最大列数
int colnum = row.getPhysicalNumberOfCells();
for (int i = 1; i<rownum; i++) {
	row = sheet.getRow(i);
	Cell cell = row.getCell(j);//拿到单元格
}

最终的目的就是拿到单元格的数据

拿到以后进行转化

	public static Object getCellFormatValue(Cell cell) throws ParseException{
        Object cellValue = null;
        if(cell!=null){
            //判断cell类型
            switch(cell.getCellType()){
            case Cell.CELL_TYPE_NUMERIC:{
            	//判断cell是否为日期格式
                if(DateUtil.isCellDateFormatted(cell)){
                    //转换为日期格式YYYY-mm-dd
                	Date date = cell.getDateCellValue();
                	SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
                	cellValue = sdf.format(date);
                }else{
                	cell.setCellType(Cell.CELL_TYPE_STRING);
                    cellValue = cell.getRichStringCellValue().getString();
                    //数字
                    //cellValue = String.valueOf(cell.getNumericCellValue());
                }
                break;
            }
            case Cell.CELL_TYPE_FORMULA:{
                cellValue = String.valueOf(cell.getNumericCellValue());
                break;
            }
            case Cell.CELL_TYPE_STRING:{
            	cellValue = cell.getRichStringCellValue().getString();
                break;
            }
            default:
                cellValue = "";
            }
        }else{
            cellValue = "";
        }
        return cellValue;
    }

我是把时间格式和数字格式都转化成String类型,接着进行后期处理,因为数字类型会自动读取成double的类型,十分烦人,而时间格式有时候好使有时候不好使,会识别成String类型,所以我就统一转成String类型处理了。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Java中导入Excel数据,可以按照以下步骤进行操作: 1. 首先,将Excel文件上传到服务器的指定文件夹,并进行重命名。可以使用文件上传组件或者自定义的上传方法来实现这一步骤。\[2\] 2. 获取上传文件的路径和别名路径,这些路径将用于后续的操作。\[2\] 3. 将上传的Excel文件转化为输入流,可以使用POI框架来实现这一步骤。\[2\] 4. 使用相应的方法将输入流中的文件数据转化为List<List<Object>>对象。这样可以遍历Excel中的值,并将其存储在一个二维列表中。\[2\] 5. 遍历Excel中的数据,可以使用循环来逐行读取数据。在每次循环中,可以调用setFieldValueByFieldName方法来为属性赋值。最终,可以得到完整的数据。\[2\] 6. 在后台调用相应的方法,例如getObjectList(file, Exam.class),来获取最终的数据列表。\[2\] 以上是导入Excel数据的一般步骤,具体的实现方式可以根据你的需求和使用的框架进行调整。如果你需要更详细的代码示例或者具体的实现细节,请提供更多的信息。 #### 引用[.reference_title] - *1* *3* [Java实现Excel导入导出操作详解](https://blog.csdn.net/acoolper/article/details/124662747)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Java实现Excel导入](https://blog.csdn.net/weixin_51309915/article/details/124714835)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值