栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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;


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();
  }

  
  private boolean fileNameFileter(File file){
    boolean endsWith = false;
    if(file != null){
      String fileName = file.getName();
      endsWith = fileName.endsWith(".xls") || fileName.endsWith(".xlsx");
    }
    return endsWith;
  }

  
  private Row getHeaderRow(Sheet sheet, int index){
    Row headerRow = null;
    if(sheet!=null){
      headerRow = sheet.getRow(index);
    }
    return headerRow;
  }

  
  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;
  }

  
  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;
  }

  
  public JSonArray readExcle(File file,int headerIndex,int headType){
    List> lists = new ArrayList>();
    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 map = new HashMap();
   for(int h = 0; h

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":"总裁"}]

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

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/143991.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号