java 读取本地excel 文件,将excel内容转换成java对象

该博客介绍了如何在Java中利用Apache POI库读取本地Excel文件(.xlsx格式)的内容,并将其转换为Java对象。通过创建一个名为ExcelImport的类,实现了从指定文件路径读取Excel数据,遍历每一行,提取姓名、性别、年龄和出生日期等信息,并存储到HashMap中,最后将数据集合转换为JSON字符串输出。注意,对于Excel中的日期,需要设置正确的格式并使用getDateCellValue方法处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

操作工具 eclipse + maven 

1. java操作excel所使用的jar包 poi-ooxml

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

        </dependency>

2.在本地建立一个excel文件

    路径:C:/Users/liuyouchao/Desktop/test.xlsx 

    内容如下

    

3.书写代码实现

package com.daojia.certify.excelimport;

import java.io.FileInputStream;

import java.util.ArrayList;

import java.util.Date;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import org.apache.poi.xssf.usermodel.XSSFCell;

import org.apache.poi.xssf.usermodel.XSSFRow;

import org.apache.poi.xssf.usermodel.XSSFSheet;

import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import com.alibaba.fastjson.JSON;

import com.daojia.certify.util.DateBuilder;

/**

 * @Description : TODO导入excel

 * @date : Mar 31, 2018 5:17:14 PM

 */

public class ExcelImport {

public static void main(String args[]){

ExcelImport  excelImport = new ExcelImport();

try {

excelImport.importExcelAction();

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

    //导入Excel数据

public void importExcelAction() throws Exception {           

//文件路径

        String filePath ="C:/Users/daojia/Desktop/test.xlsx";

      XSSFWorkbook wookbook = new XSSFWorkbook(new FileInputStream(filePath));

      XSSFSheet sheet = wookbook.getSheet("Sheet1");

      //获取到Excel文件中的所有行数

      int rows = sheet.getPhysicalNumberOfRows();

      //遍历行

      List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();

      for (int i = 1; i < rows; i++) {

        // 读取左上端单元格

        XSSFRow row = sheet.getRow(i);

        // 行不为空

        if (row != null) {

            Map<String,Object> map = new HashMap<String,Object>();  

        //获取到Excel文件中的所有的列

        int cells = row.getPhysicalNumberOfCells(); 

            //姓名

            XSSFCell nameCell =row.getCell(1); 

            String name = getValue(nameCell);

            //性别

            XSSFCell sexCell =row.getCell(2); 

            String sex = getValue(sexCell);     

            //年龄

            XSSFCell ageCell =row.getCell(3); 

            String age = getValue(ageCell);     

            //出生年月

            XSSFCell birthCell =row.getCell(4); 

            String birth = DateBuilder.convertDateToString(birthCell.getDateCellValue(), "yyyy-MM-dd");   

          map.put("name", name);

          map.put("sex", sex);

          map.put("age", age);

          map.put("birth", birth); 

          list.add(map);

            }       

      }

      System.out.println("list = "+JSON.toJSONString(list));

}

private String getValue(XSSFCell xSSFCell){

if(null == xSSFCell){

return "";

}

if (xSSFCell.getCellType() == xSSFCell.CELL_TYPE_BOOLEAN) {  

                 // 返回布尔类型的值  

                 return String.valueOf(xSSFCell.getBooleanCellValue());  

             } else if (xSSFCell.getCellType() == xSSFCell.CELL_TYPE_NUMERIC) {  

                 // 返回数值类型的值  

                 return String.valueOf(xSSFCell.getNumericCellValue());  

             } else {  

                 // 返回字符串类型的值  

                 return String.valueOf(xSSFCell.getStringCellValue());  

             }  

}

输出结果

list = [{"age":"","birth":"1991-09-03","name":"张三","sex":"男"},{"age":"23.0","birth":"1992-09-03","name":"李四","sex":"女"},{"age":"34.0","birth":"1993-09-03","name":"王五","sex":"男"},{"age":"54.0","birth":"1994-09-03","name":"赵六","sex":"女"}]

注意:

    1.如果excel格式为 .xlsx ,使用以上方法,如果excel格式为 .xls 以上的  XSSFCell 变成  HSSFCell

    2.excel中的日期处理

            首先将excel日期设置格式为 2017/09/08  

            其次使用 getDateCellValue 方法读取日期格式即可

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值