读取Excel文件,用对象接收数据

@NoArgsConstructor(access = AccessLevel.PRIVATE)
@Slf4j
public final class ExcelUtils {

    /**
     * 读取Excel表格的第一个sheet数据到list, 强制实体类成员变量声明顺序与Excel数据列数据一致
     * @param file MultipartFile
     * @param clazz 数据类的class
     * @return list<T>
     */
    public static <T> List<T> readFromExcel(MultipartFile file, Class<T> clazz) {

        // 排除掉被@FieldExclude 标记过的Field
        List<Field> fields = Arrays.stream(clazz.getDeclaredFields())
                .filter(field -> field.getAnnotation(FieldExclude.class) == null)
                .collect(Collectors.toList());

        List<T> result;
        Sheet sheet;

        try {
            InputStream stream = file.getInputStream();
            Workbook workbook = new XSSFWorkbook(stream);

            // 读取Excel第一个sheet
            sheet = workbook.getSheetAt(0);

        } catch (IOException e) {
            log.error("Excel数据读取失败:
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现Java对象接收Excel导入数据,可以使用Apache POI库来处理Excel文件读取和解析。以下是一个示例代码,可以将Excel文件中的数据转化为Java对象: ```java import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.WorkbookFactory; public class ExcelToObject { public static void main(String[] args) throws IOException { // 读取Excel文件 FileInputStream inputStream = new FileInputStream(new File("input.xlsx")); // 获取工作簿对象 Workbook workbook = WorkbookFactory.create(inputStream); // 获取Sheet对象 Sheet sheet = workbook.getSheetAt(0); // 创建对象列表 List<MyObject> dataList = new ArrayList<>(); // 迭代行 Iterator<Row> rowIterator = sheet.rowIterator(); while (rowIterator.hasNext()) { Row row = rowIterator.next(); // 跳过表头行 if (row.getRowNum() == 0) { continue; } // 创建对象 MyObject obj = new MyObject(); // 迭代列 Iterator<Cell> cellIterator = row.cellIterator(); while (cellIterator.hasNext()) { Cell cell = cellIterator.next(); int columnIndex = cell.getColumnIndex(); // 根据列索引设置对象的字段值 switch (columnIndex) { case 0: obj.setId(cell.getStringCellValue()); break; case 1: obj.setName(cell.getStringCellValue()); break; case 2: obj.setAge((int) cell.getNumericCellValue()); break; case 3: obj.setAddress(cell.getStringCellValue()); break; default: break; } } // 将对象添加到列表中 dataList.add(obj); } // 关闭工作簿和输入流 workbook.close(); inputStream.close(); // 输出对象列表 for (MyObject obj : dataList) { System.out.println(obj); } } } ``` 在这个示例代码中,我们首先读取Excel文件并解析出其中的Sheet对象,然后逐行迭代,将每行数据转化为一个Java对象,并添加到一个对象列表中。在迭代列时,我们根据列索引设置对象的各个字段值。最后,我们输出对象列表,并关闭工作簿和输入流。 需要注意的是,这里的示例中使用了自定义的MyObject类来表示Excel表格中的一行数据,你需要根据实际情况进行修改。另外,如果要处理比较大的Excel文件,建议使用XSSF模式,这样可以更好地处理大量数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值