Java实现excel表格转成json的方法

发布时间 - 2026-01-11 03:27:24    点击率:

今天有个朋友问我,有没有excel表格到处json的方法,在网上找到了好几个工具,都不太理想,于是根据自己的需求,自己写了一个工具。

功能代码

package org.duang.test;

import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import net.sf.json.JSONArray;

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.DateUtil;
import org.apache.poi.ss.usermodel.FormulaEvaluator;
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;

/**
 * excel表格转成json
 * @ClassName: Excel2JSONHelper  
 * @Description:TODO(这里用一句话描述这个类的作用)  
 * @author LiYonghui
 * @date 2017年1月6日 下午4:42:43
 */
public class Excel2JSONHelper {
  //常亮,用作第一种模板类型,如下图
  private static final int HEADER_VALUE_TYPE_Z=1;
  //第二种模板类型,如下图
  private static final int HEADER_VALUE_TYPE_S=2;
  public static void main(String[] args) {
     File dir = new File("e:\\2003.xls");
     Excel2JSONHelper excelHelper = getExcel2JSONHelper();
     //dir文件,0代表是第一行为保存到数据库或者实体类的表头,一般为英文的字符串,2代表是第二种模板, 
     JSONArray jsonArray = excelHelper.readExcle(dir, 0, 2);
     System.out.println(jsonArray.toString());;
  }

  /**
   *
   * 获取一个实例
   */
  private static Excel2JSONHelper getExcel2JSONHelper(){
    return new Excel2JSONHelper();
  }

  /**
   * 文件过滤
   * @Title: fileNameFileter  
   * @Description: TODO(这里用一句话描述这个方法的作用)  
   * @param:  
   * @author LiYonghui  
   * @date 2017年1月6日 下午4:45:42
   * @return: void   
   * @throws
   */
  private boolean fileNameFileter(File file){
    boolean endsWith = false;
    if(file != null){
      String fileName = file.getName();
      endsWith = fileName.endsWith(".xls") || fileName.endsWith(".xlsx");
    }
    return endsWith;
  }

  /**
   * 获取表头行
   * @Title: getHeaderRow  
   * @Description: TODO(这里用一句话描述这个方法的作用)  
   * @param: @param sheet
   * @param: @param index
   * @param: @return 
   * @author LiYonghui  
   * @date 2017年1月6日 下午5:05:24
   * @return: Row   
   * @throws
   */
  private Row getHeaderRow(Sheet sheet, int index){
    Row headerRow = null;
    if(sheet!=null){
      headerRow = sheet.getRow(index);
    }
    return headerRow;
  }

  /**
   * 获取表格中单元格的value
   * @Title: getCellValue  
   * @Description: TODO(这里用一句话描述这个方法的作用)  
   * @param: @param row
   * @param: @param cellIndex
   * @param: @param formula
   * @param: @return 
   * @author LiYonghui  
   * @date 2017年1月6日 下午5:40:28
   * @return: Object   
   * @throws
   */
  private Object getCellValue(Row row,int cellIndex,FormulaEvaluator formula){
    Cell cell = row.getCell(cellIndex);
    if(cell != null){
      switch (cell.getCellType()) {
      //String类型
      case Cell.CELL_TYPE_STRING:
        return cell.getRichStringCellValue().getString();

       //number类型
      case Cell.CELL_TYPE_NUMERIC:
        if (DateUtil.isCellDateFormatted(cell)) {
          return cell.getDateCellValue().getTime();
        } else {
          return cell.getNumericCellValue();
        }
      //boolean类型
      case Cell.CELL_TYPE_BOOLEAN:
        return cell.getBooleanCellValue();
      //公式  
      case Cell.CELL_TYPE_FORMULA:
        return formula.evaluate(cell).getNumberValue();
      default:
        return null;
      }
    }
    return null;
  }

  /**
   * 获取表头value
   * @Title: getHeaderCellValue  
   * @Description: TODO(这里用一句话描述这个方法的作用)  
   * @param: @param headerRow
   * @param: @param cellIndex 英文表头所在的行,从0开始计算哦
   * @param: @param type 表头的类型第一种 姓名(name)英文于实体类或者数据库中的变量一致
   * @param: @return 
   * @author LiYonghui  
   * @date 2017年1月6日 下午6:12:21
   * @return: String   
   * @throws
   */
  private String getHeaderCellValue(Row headerRow,int cellIndex,int type){
    Cell cell = headerRow.getCell(cellIndex);
    String headerValue = null;
    if(cell != null){
      //第一种模板类型
      if(type == HEADER_VALUE_TYPE_Z){
        headerValue = cell.getRichStringCellValue().getString();
        int l_bracket = headerValue.indexOf("(");
        int r_bracket = headerValue.indexOf(")");
        if(l_bracket == -1){
          l_bracket = headerValue.indexOf("(");
        }
        if(r_bracket == -1){
          r_bracket = headerValue.indexOf(")");
        }
        headerValue = headerValue.substring(l_bracket+1, r_bracket);
      }else if(type == HEADER_VALUE_TYPE_S){
      //第二种模板类型
        headerValue = cell.getRichStringCellValue().getString();
      }
    }
    return headerValue;
  }

  /**
   * 读取excel表格
   * @Title: readExcle  
   * @Description: TODO(这里用一句话描述这个方法的作用)  
   * @param: @param file
   * @param: @param headerIndex
   * @param: @param headType 表头的类型第一种 姓名(name)英文于实体类或者数据库中的变量一致
   * @author LiYonghui  
   * @date 2017年1月6日 下午6:13:27
   * @return: void   
   * @throws
   */
  public JSONArray readExcle(File file,int headerIndex,int headType){
    List<Map<String, Object>> lists = new ArrayList<Map<String, Object>>();
    if(!fileNameFileter(file)){
      return null;
    }else{
      try {
        //加载excel表格
        WorkbookFactory wbFactory = new WorkbookFactory();
        Workbook wb = wbFactory.create(file);
        //读取第一个sheet页
        Sheet sheet = wb.getSheetAt(0); 
        //读取表头行
        Row headerRow = getHeaderRow(sheet, headerIndex);
        //读取数据
        FormulaEvaluator formula = wb.getCreationHelper().createFormulaEvaluator();
        for(int r = headerIndex+1; r<= sheet.getLastRowNum();r++){
          Row dataRow = sheet.getRow(r);
          Map<String, Object> map = new HashMap<String, Object>();
          for(int h = 0; h<dataRow.getLastCellNum();h++){
            //表头为key
            String key = getHeaderCellValue(headerRow,h,headType);
            //数据为value
            Object value = getCellValue(dataRow, h, formula);
            if(!key.equals("") && !key.equals("null") && key != null ){
              map.put(key, value);
            }
          }
          lists.add(map);
        }

      } catch (Exception e) {
        e.printStackTrace();
      } 
    }
    JSONArray jsonArray = JSONArray.fromObject(lists);
    return jsonArray;
  }
}

excel表格模板类型和调用方式

第一种 :用括号把实体类变量名称或者数据库字段名称括起来

调用方法如下:

  //表格的名称为2003.xls
  File file= new File("e:\\2003.xls");
  Excel2JSONHelper excelHelper = getExcel2JSONHelper();
  //字母表头为在第1行,第1种模板类型
  JSONArray jsonArray = excelHelper.readExcle(file, 1, 1);

第二种: 实体类变量名称或者数据库字段另起一行,如下两张图都行

调用方法如下:

  //表格的名称为2003.xls
  File file= new File("e:\\2003.xls");
  Excel2JSONHelper excelHelper = getExcel2JSONHelper();
  //字母表头为在第1行,第2种模板类型
  JSONArray jsonArray = excelHelper.readExcle(file, 1, 2);

  //表格的名称为2003.xls
  File file= new File("e:\\2003.xls");
  Excel2JSONHelper excelHelper = getExcel2JSONHelper();
  //字母表头为在第2行,第2种模板类型
  JSONArray jsonArray = excelHelper.readExcle(file, 2, 2);

jsonArray打印的结果

复制代码 代码如下:
[{"index":"1","name":"李逵","jobNum":"10004","dept":"开发部","job":"android工程师"},   {"index":"2","name":"宋江","jobNum":"10001","dept":"总裁办","job":"总裁"}]

符合我的需求,如果需要复杂的,还需要进行整理,如果有什么意见,请提出来,我及时改进…谢谢

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# java  # excel转json 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Python进程池调度策略_任务分发说明【指导】  企业网站制作这些问题要关注  绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信  如何在建站主机中优化服务器配置?  Laravel如何实现多表关联模型定义_Laravel多对多关系及中间表数据存取【方法】  Laravel怎么设置路由分组Prefix_Laravel多级路由嵌套与命名空间隔离【步骤】  高配服务器限时抢购:企业级配置与回收服务一站式优惠方案  Win11怎么开启自动HDR画质_Windows11显示设置HDR选项  如何在新浪SAE免费搭建个人博客?  JavaScript Ajax实现异步通信  javascript读取文本节点方法小结  Laravel如何实现本地化和多语言支持?(i18n教程)  网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?  html如何与html链接_实现多个HTML页面互相链接【互相】  php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】  文字头像制作网站推荐软件,醒图能自动配文字吗?  简单实现Android验证码  Laravel如何处理和验证JSON类型的数据库字段  如何批量查询域名的建站时间记录?  详解Oracle修改字段类型方法总结  车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?  大同网页,大同瑞慈医院官网?  EditPlus中的正则表达式实战(6)  如何获取上海专业网站定制建站电话?  如何在 Pandas 中基于一列条件计算另一列的分组均值  关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)  如何制作一个表白网站视频,关于勇敢表白的小标题?  Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】  如何快速搭建高效香港服务器网站?  Laravel集合Collection怎么用_Laravel集合常用函数详解  如何快速辨别茅台真假?关键步骤解析  Laravel如何操作JSON类型的数据库字段?(Eloquent示例)  Laravel数据库迁移怎么用_Laravel Migration管理数据库结构的正确姿势  Laravel策略(Policy)如何控制权限_Laravel Gates与Policies实现用户授权  Laravel如何创建自定义Facades?(详细步骤)  Laravel distinct去重查询_Laravel Eloquent去重方法  新三国志曹操传主线渭水交兵攻略  Laravel怎么使用Session存储数据_Laravel会话管理与自定义驱动配置【详解】  广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?  历史网站制作软件,华为如何找回被删除的网站?  Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】  网站制作大概多少钱一个,做一个平台网站大概多少钱?  在Oracle关闭情况下如何修改spfile的参数  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  Python面向对象测试方法_mock解析【教程】  JavaScript模板引擎Template.js使用详解  Python文本处理实践_日志清洗解析【指导】  如何使用 Go 正则表达式精准提取括号内首个纯字母标识符(忽略数字与嵌套)  如何快速搭建高效WAP手机网站?  如何在香港服务器上快速搭建免备案网站?