poi无实体类导入excel

@ResponseBody
@RequestMapping(value = “upload”, method = {RequestMethod.GET, RequestMethod.POST})
public Object importExcel(@RequestParam(“file”) MultipartFile file) {
try {

        if (file != null && file.getSize() > 0) {

            //返回的第一条数据是表头信息
            List<String[]> data = GhPOIUtils.readExcel(file);

            //data 解析出来的excel数据, list第一条数据是表头数据,第二条数据开始为     表头下的内容
            return new Result();
        }

        return new Result(-1, "文件为空", "");

    } catch (BaseException e) {
        return new Result(-1, e.getMessage(), "");
    } catch (Exception e) {
        return new Result(-1, "系统异常", "");
    }

}


--------------------工具类----------------------------------------


public class GhPOIUtils {
public static Workbook getWorkBook(MultipartFile file) {

    //创建Workbook工作薄对象,表示整个excel
    Workbook workbook = null;
    try {
        //获取excel文件的io流
        InputStream is = file.getInputStream();

        workbook = WorkbookFactory.create(is);
    } catch (InvalidFormatException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return workbook;
}

public static String getCellValue(Cell cell) {
    String cellValue = "";
    if (cell == null) {
        return cellValue;
    }
    //把数字当成String来读,避免出现1读成1.0的情况
    if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {
        cell.setCellType(Cell.CELL_TYPE_STRING);
    }
    //判断数据的类型
    switch (cell.getCellType()) {
        case Cell.CELL_TYPE_NUMERIC: //数字
            cellValue = String.valueOf(cell.getNumericCellValue());
            break;
        case Cell.CELL_TYPE_STRING: //字符串
            cellValue = String.valueOf(cell.getStringCellValue());
            break;
        case Cell.CELL_TYPE_BOOLEAN: //Boolean
            cellValue = String.valueOf(cell.getBooleanCellValue());
            break;
        case Cell.CELL_TYPE_FORMULA: //公式
            cellValue = String.valueOf(cell.getCellFormula());
            break;
        case Cell.CELL_TYPE_BLANK: //空值
            cellValue = "";
            break;
        case Cell.CELL_TYPE_ERROR: //故障
            cellValue = "非法字符";
            break;
        default:
            cellValue = "未知类型";
            break;
    }
    return cellValue;
}


/**
 * 读入excel文件,解析后返回
 * @param file excel 文件
 * @return  list中的每个数组是每一行excel,list中的第一条数据是excel的表头,其余之后的是excel中的数据
 */
public static List<String[]> readExcel(MultipartFile file) throws IOException {

    //获得Workbook工作薄对象
    Workbook workbook = getWorkBook(file);
    //创建返回对象,把每行中的值作为一个数组,所有行作为一个集合返回
    List<String[]> list = new ArrayList<String[]>();
    if (workbook != null) {
        //只读取第一个sheet页
        for (int sheetNum = 0; sheetNum < 1; sheetNum++) {
            //获得当前sheet工作表
            Sheet sheet = workbook.getSheetAt(sheetNum);
            if (sheet == null) {
                continue;
            }
            //获得当前sheet的开始行
            int firstRowNum = sheet.getFirstRowNum();
            //获得当前sheet的结束行
            int lastRowNum = sheet.getLastRowNum();
            //循环所有行
            for (int rowNum = firstRowNum; rowNum <= lastRowNum; rowNum++) {
                //获得当前行
                Row row = sheet.getRow(rowNum);
                if (row == null) {
                    continue;
                }
                //获得当前行的开始列
                int firstCellNum = row.getFirstCellNum();
                //获得当前行的列数
                int lastCellNum;
                if (rowNum == 0){
                    lastCellNum = row.getPhysicalNumberOfCells();
                }else {
                    lastCellNum = list.get(0).length;
                }
                String[] cells = new String[lastCellNum];  //需要更改  是数组长度  “row.getPhysicalNumberOfCells()”
                //循环当前行
                for (int cellNum = firstCellNum; cellNum < lastCellNum; cellNum++) { //需要更改循环长度 “lastCellNum”
                    Cell cell = row.getCell(cellNum);
                    cells[cellNum] = getCellValue(cell);
                }
                list.add(cells);
            }
        }
        workbook.close();
    }
    return list;
}

}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将Excel中的数据导入实体类中,你可以使用Apache POI库来处理Excel文件。下面是一个简单的示例代码,演示如何使用POI导入Excel数据到实体类中。 ```java import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io.FileInputStream; import java.io.IOException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class ExcelImporter { public List<YourEntityClass> importDataFromExcel(String filePath) throws IOException { List<YourEntityClass> entities = new ArrayList<>(); FileInputStream fis = new FileInputStream(filePath); Workbook workbook = new XSSFWorkbook(fis); Sheet sheet = workbook.getSheetAt(0); // 获取第一个Sheet Iterator<Row> rowIterator = sheet.iterator(); while (rowIterator.hasNext()) { Row row = rowIterator.next(); Iterator<Cell> cellIterator = row.cellIterator(); YourEntityClass entity = new YourEntityClass(); // 根据Excel的顺序,获取对应的单元格数据并设置到实体类中 Cell cell1 = cellIterator.next(); entity.setField1(cell1.getStringCellValue()); Cell cell2 = cellIterator.next(); entity.setField2(cell2.getNumericCellValue()); // ... 继续设置其他字段 entities.add(entity); } workbook.close(); fis.close(); return entities; } } ``` 在这个示例中,你需要将`YourEntityClass`替换为你自己的实体类名字,并根据Excel顺序逐个获取对应单元格的数据,然后设置到实体类字段中。你可以根据需要,使用不同的`getCellType()`方法来获取不同类型的单元格值。 请注意,此代码仅适用于`.xlsx`格式的Excel文件。如果你要导入`.xls`格式的文件,你需要使用`HSSFWorkbook`替代`XSSFWorkbook`。 同时,记得处理可能出现的异常情况,如文件不存在Excel格式不正确等。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值