首页 Java java教程 Java中excel表格转成json的的实现方法

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

Sep 29, 2017 am 10:09 AM
excel javascript json

本篇文章主要介绍了Java实现excel表格转成json的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

今天有个朋友问我,有没有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的的实现方法的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

excel打印表格框线消失怎么办 excel打印表格框线消失怎么办 Mar 21, 2024 am 09:50 AM

如果在打开一份需要打印的文件时,在打印预览里我们会发现表格框线不知为什么消失不见了,遇到这样的情况,我们就要及时进行处理,如果你的打印文件里也出现了此类的问题,那么就和小编一起来学习下边的课程吧:excel打印表格框线消失怎么办?1、打开一份需要打印的文件,如下图所示。  2、选中所有需要的内容区域,如下图所示。  3、单击鼠标右键,选择“设置单元格格式”选项,如下图所示。  4、点击窗口上方的“边框”选项,如下图所示。  5、在左侧的线条样式中选择细实线图样,如下图所示。  6、选择“外边框”

excel同时筛选3个以上关键词怎么操作 excel同时筛选3个以上关键词怎么操作 Mar 21, 2024 pm 03:16 PM

在日常办公中经常使用Excel来处理数据,时常遇到需要使用“筛选”功能。当我们在Excel中选择执行“筛选”时,对于同一列而言,最多只能筛选两个条件,那么,你知道excel同时筛选3个以上关键词该怎么操作吗?接下来,就让小编为大家演示一遍。第一种方法是将条件逐步添加到筛选器中。如果要同时筛选出三个符合条件的明细,首先需要逐步筛选出其中一个。开始时,可以先根据条件筛选出姓“王”的员工。然后单击【确定】,接着在筛选结果中勾选【将当前所选内容添加到筛选器】。操作步骤如下所示。  同样,再次分别执行筛选

excel表格兼容模式改正常模式的方法 excel表格兼容模式改正常模式的方法 Mar 20, 2024 pm 08:01 PM

在我们日常的工作学习中,从他人处拷贝了Excel文件,打开进行内容添加或重新编辑后,再保存的有时候,有时会提示出现兼容性检查的对话框,非常的麻烦,不知道Excel软件,可不可改为正常模式呢?那么下面就由小编为大家带来解决这个问题的详细步骤,让我们一起来学习吧。最后一定记得收藏保存。1、打开一个工作表,在工作表的名称中显示多出来一个兼容模式,如图所示。2、在这个工作表中,进行了内容的修改后保存,结果总是弹出兼容检查器的对话框,很麻烦看见这个页面,如图所示。  3、点击Office按钮,点另存为,然

excel中iif函数的用法 excel中iif函数的用法 Mar 20, 2024 pm 06:10 PM

大部分用户使用Excel都是用来处理表格数据的,其实Excel还有vba程序编写,这个除了专人士应该没有多少用户用过此功能,在vba编写时常常会用到iif函数,它其实跟if函数的功能差不多,下面小编给大家介绍下iif函数的用法。Excel中SQL语句和VBA代码中都有iif函数。iif函数和excel工作表中的IF函数用法相似,执行真假值判断,根据逻辑计算的真假值,返回不同结果。IF函数用法是(条件,是,否)。VBA中的IF语句和IIF函数,前者IF语句是控制语句可以根据条件执行不同的语句,后者

excel阅读模式在哪里设置 excel阅读模式在哪里设置 Mar 21, 2024 am 08:40 AM

在软件的学习中,我们习惯用excel,不仅仅是因为需要方便,更因为它可以满足多种实际工作中需要的格式,而且excel运用起来非常的灵活,有种模式是方便阅读的,今天带给大家的就是:excel阅读模式在哪里设置。1、打开电脑,然后再打开Excel应用,找到目标数据。2、要想在Excel中,设置阅读模式,有两种方式。第一种:Excel中,有大量的便捷处理方式,分布在Excel中布局中。在Excel的右下角,有设置阅读模式的快捷方式,找到十字标志的图案,点击即可进入阅读模式,在十字标志的右边有一个小的三

PPT幻灯片插入excel图标的操作方法 PPT幻灯片插入excel图标的操作方法 Mar 26, 2024 pm 05:40 PM

1、打开PPT,翻页至需要插入excel图标的页面。点击插入选项卡。2、点击【对象】。3、跳出以下对话框。4、点击【由文件创建】,点击【浏览】。5、选择需要插入的excel表格。6、点击确定后跳出如下页面。7、勾选【显示为图标】。8、点击确定即可。

html怎么读取excel数据 html怎么读取excel数据 Mar 27, 2024 pm 05:11 PM

html读取excel数据的方法:1、使用JavaScript库读取Excel数据;2、使用服务器端编程语言读取Excel数据。

你知道Excel怎么开根号吗 你知道Excel怎么开根号吗 Mar 20, 2024 pm 07:11 PM

Hello,各位同学大家好,今天我又来给大家分享教程了。你们知道Excel表格怎么开根号吗?有时候,我们在使用Excel表格时经常会用到开根号。对于老炮儿来说,开根号就是小菜一碟,但对于小白同学来说的话,Excel中开根号是难于上青天。今天,我们就来仔细说一下,在Excel中怎么开根号。这节课很有价值,同学们请认真听讲。步骤如下:1、首先,我们打开电脑上的Excel表格;接着,我们新建一个工作簿。2、接着,在我们在空白的工作表中输入以下内容。(如图所示)3、接着,我们点击【工具栏】上的【插入函数

See all articles