利用WorkBook实现excel到list的转换

本文介绍了如何在Java中利用Apache POI库将Excel文件内容转换为List<Map<String, Object>>。首先,通过Maven引入POI相关依赖,接着展示了一个名为ImportExcelUtil的类,该类包含了读取Excel文件并进行转换的具体实现。转换过程中,将Excel的每个单元格数据映射为Map中的键值对,最后,这些Map对象被收集到一个List中,方便进一步处理或转化为Java Bean对象。" 116932466,10535321,使用SMB协议在Linux、Mac和Windows上创建Time Machine备份,"['macOS', 'Linux', '树莓派', 'Windows', '备份']

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

1、导入maven依赖

<org.poi-version>3.14</org.poi-version>




org.apache.poi
poi
o r g . p o i − v e r s i o n < / v e r s i o n > < / d e p e n d e n c y > < d e p e n d e n c y > < g r o u p I d > o r g . a p a c h e . p o i < / g r o u p I d > < a r t i f a c t I d > p o i − o o x m l < / a r t i f a c t I d > < v e r s i o n > {org.poi-version}</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version> org.poiversion</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poiooxml</artifactId><version>{org.poi-version}


org.apache.poi
poi-examples
o r g . p o i − v e r s i o n < / v e r s i o n > < / d e p e n d e n c y > < d e p e n d e n c y > < g r o u p I d > o r g . a p a c h e . p o i < / g r o u p I d > < a r t i f a c t I d > p o i − e x c e l a n t < / a r t i f a c t I d > < v e r s i o n > {org.poi-version}</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-excelant</artifactId> <version> org.poiversion</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poiexcelant</artifactId><version>{org.poi-version}


com.alibaba
fastjson
1.2.28

2、具体实现
package experience;

import com.alibaba.fastjson.JSON;
import org.apache.log4j.Logger;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
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.xssf.usermodel.XSSFWorkbook;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**

  • Excel文件流 --> List <Map<String,Object>> 对象
    想直接转成java bean的朋友可以使用fastjson将 List<Map<String,Object>>转成bean对象

*/

public class ImportExcelUtil {

private static Logger log = Logger.getLogger(ImportExcelUtil.class);

private final static String excel2003L = ".xls"; // 2003- 版本的excel
private final static String excel2007U = ".xlsx"; // 2007+ 版本的excel

/**
 * 将流中的Excel数据转成List<Map>
 *
 * @param in
 *            输入流
 * @param fileName
 *            文件名(判断Excel版本)
 * @param mapping
 *            字段名称映射
 * @return
 * @throws Exception
 */
public static List<Map<String, Object>> parseExcel(InputStream in, String fileName,
                                                   Map<String, String> mapping) throws Exception {
    // 根据文件名来创建Excel工作薄
    Workbook work = getWorkbook(in, fileName);
    if (null == work) {
        throw new Exception("创建Excel工作薄为空!");
    }
    Sheet sheet = null;
    Row row = null;
    Cell cell = null;
    // 返回数据
    List<Map<String, Object>> ls = new ArrayList<Map<String, Object>>();

    // 遍历Excel中所有的sheet
    for (int i = 0; i < work.getNumberOfSheets(); i++) {
        sheet = work.getSheetAt(i);
        if (sheet == null)
            continue;

        // 取第一行标题
        row = sheet.getRow(0);
        String title[] = null;
        if (row != null) {
            title = new String[row.getLastCellNum()];

            for (int y = row.getFirstCellNum(); y < row.getLastCellNum(); y++) {
                cell = row.getCell(y);
                title[y] = (String) getCellValue(cell);
            }

        } else
            continue;
        log.info(JSON.toJSONString(title));

        // 遍历当前sheet中的所有行
        for (int j = 1; j < sheet.getLastRowNum() + 1; j++) {
            row = sheet.getRow(j);
            Map<String, Object> m = new HashMap<String, Object>();
            // 遍历所有的列
            for (int y = row.getFirstCellNum(); y < row.getLastCellNum(); y++) {
                cell = row.getCell(y);
                String key = title[y];
                // log.info(JSON.toJSONString(key));
                m.put(mapping.get(key), getCellValue(cell));
            }
            ls.add(m);
        }

    }
    work.close();
    return ls;
}

/**
 * 描述:根据文件后缀,自适应上传文件的版本
 *
 * @param inStr
 *            ,fileName
 * @return
 * @throws Exception
 */
public static Workbook getWorkbook(InputStream inStr, String fileName) throws Exception {
    Workbook wb = null;
    String fileType = fileName.substring(fileName.lastIndexOf("."));
    if (excel2003L.equals(fileType)) {
        wb = new HSSFWorkbook(inStr); // 2003-
    } else if (excel2007U.equals(fileType)) {
        wb = new XSSFWorkbook(inStr); // 2007+
    } else {
        throw new Exception("解析的文件格式有误!");
    }
    return wb;
}

/**
 * 描述:对表格中数值进行格式化
 *
 * @param cell
 * @return
 */
public static Object getCellValue(Cell cell) {
    Object value = null;
    DecimalFormat df = new DecimalFormat("0"); // 格式化number String字符
    SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd"); // 日期格式化
    DecimalFormat df2 = new DecimalFormat("0"); // 格式化数字

    switch (cell.getCellType()) {
        case Cell.CELL_TYPE_STRING:
            value = cell.getRichStringCellValue().getString();
            break;
        case Cell.CELL_TYPE_NUMERIC:
            if ("General".equals(cell.getCellStyle().getDataFormatString())) {
                value = df.format(cell.getNumericCellValue());
            } else if ("m/d/yy".equals(cell.getCellStyle().getDataFormatString())) {
                value = sdf.format(cell.getDateCellValue());
            } else {
                value = df2.format(cell.getNumericCellValue());
            }
            break;
        case Cell.CELL_TYPE_BOOLEAN:
            value = cell.getBooleanCellValue();
            break;
        case Cell.CELL_TYPE_BLANK:
            value = "";
            break;
        default:
            break;
    }
    return value;
}

public static void main(String[] args) throws Exception {
    File file = new File("E:\\aa.xlsx");
    FileInputStream fis = new FileInputStream(file);
    Map<String, String> m = new HashMap<String, String>();
    m.put("id", "id");
    m.put("姓名", "name");
    m.put("年龄", "age");
    List<Map<String, Object>> ls = parseExcel(fis, file.getName(), m);
    System.out.println(JSON.toJSONString(ls));
}

}

3、转换的表格元素
在这里插入图片描述
4、执行结果
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值