最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java實現(xiàn)excel表格轉(zhuǎn)成json的方法

 更新時間:2017年09月28日 10:26:18   作者:Allen_LeeY  
本篇文章主要介紹了Java實現(xiàn)excel表格轉(zhuǎn)成json的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

今天有個朋友問我,有沒有excel表格到處json的方法,在網(wǎng)上找到了好幾個工具,都不太理想,于是根據(jù)自己的需求,自己寫了一個工具。

功能代碼

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表格轉(zhuǎn)成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代表是第一行為保存到數(shù)據(jù)庫或者實體類的表頭,一般為英文的字符串,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)英文于實體類或者數(shù)據(jù)庫中的變量一致
   * @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)英文于實體類或者數(shù)據(jù)庫中的變量一致
   * @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);
        //讀取數(shù)據(jù)
        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);
            //數(shù)據(jù)為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表格模板類型和調(diào)用方式

第一種 :用括號把實體類變量名稱或者數(shù)據(jù)庫字段名稱括起來

調(diào)用方法如下:

  //表格的名稱為2003.xls
  File file= new File("e:\\2003.xls");
  Excel2JSONHelper excelHelper = getExcel2JSONHelper();
  //字母表頭為在第1行,第1種模板類型
  JSONArray jsonArray = excelHelper.readExcle(file, 1, 1);

第二種: 實體類變量名稱或者數(shù)據(jù)庫字段另起一行,如下兩張圖都行

調(diào)用方法如下:

  //表格的名稱為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打印的結(jié)果

復(fù)制代碼 代碼如下:

[{"index":"1","name":"李逵","jobNum":"10004","dept":"開發(fā)部","job":"android工程師"},   {"index":"2","name":"宋江","jobNum":"10001","dept":"總裁辦","job":"總裁"}]

符合我的需求,如果需要復(fù)雜的,還需要進行整理,如果有什么意見,請?zhí)岢鰜?,我及時改進…謝謝

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Idea 快速生成方法返回值的操作

    Idea 快速生成方法返回值的操作

    這篇文章主要介紹了Idea 快速生成方法返回值的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • String split方法實現(xiàn)過程圖解

    String split方法實現(xiàn)過程圖解

    這篇文章主要介紹了String split方法實現(xiàn)過程圖解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友可以參考下
    2019-11-11
  • SpringBoot+MyBatisPlus中樂觀鎖的實現(xiàn)示例

    SpringBoot+MyBatisPlus中樂觀鎖的實現(xiàn)示例

    樂觀鎖是一種用于解決并發(fā)沖突的機制,在數(shù)據(jù)庫中用于保護數(shù)據(jù)的一致性,本文主要介紹了SpringBoot+MyBatisPlus中樂觀鎖的實現(xiàn)示例,具有一定的參考價值,感興趣的可以了解一下
    2023-08-08
  • 分析Java中ArrayList與LinkedList列表結(jié)構(gòu)的源碼

    分析Java中ArrayList與LinkedList列表結(jié)構(gòu)的源碼

    這篇文章主要介紹了Java中ArrayList與LinkedList列表結(jié)構(gòu)的源碼,文章最后對LinkedList和ArrayList以及Vector的特性有一個對比總結(jié),需要的朋友可以參考下
    2016-05-05
  • springboot 整合 sa-token簡介及入門教程

    springboot 整合 sa-token簡介及入門教程

    Sa-Token 是一個輕量級 Java 權(quán)限認證框架,主要解決:登錄認證、權(quán)限認證、Session會話、單點登錄、OAuth2.0、微服務(wù)網(wǎng)關(guān)鑒權(quán) 等一系列權(quán)限相關(guān)問題,這篇文章主要介紹了springboot 整合 sa-token簡介及入門教程,需要的朋友可以參考下
    2023-05-05
  • Spring解決循環(huán)依賴的方法(三級緩存)

    Spring解決循環(huán)依賴的方法(三級緩存)

    今天,我們要說的是spring是如何解決循環(huán)依賴的。對于一個問題說解決之前,我們首先要先明確形成問題的本因。那么循環(huán)依賴,何為循環(huán)依賴呢?感興趣的朋友跟隨小編一起看看吧
    2021-11-11
  • Java實現(xiàn)List轉(zhuǎn)換為Map的方法小結(jié)

    Java實現(xiàn)List轉(zhuǎn)換為Map的方法小結(jié)

    這篇文章主要為大家詳細介紹了Java實現(xiàn)List轉(zhuǎn)換為Map的一些常見的方法,文中的示例代碼講解詳細,具有一定的借鑒價值,有需要的小伙伴可以參考一下
    2024-03-03
  • 在CentOS7(有圖形化界面)上安裝maven和idea的詳細教程

    在CentOS7(有圖形化界面)上安裝maven和idea的詳細教程

    這篇文章主要介紹了在CentOS7(有圖形化界面)上安裝maven和idea的詳細教程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • nacos單機版啟動失敗問題以及解決

    nacos單機版啟動失敗問題以及解決

    這篇文章主要介紹了nacos單機版啟動失敗問題以及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • RxJava中多種場景的實現(xiàn)總結(jié)

    RxJava中多種場景的實現(xiàn)總結(jié)

    這篇文章給大家詳細介紹了RxJava中多種場景的實現(xiàn),對大家學(xué)習使用RxJava具有一定的參考借鑒價值,有需要的朋友們可以參考學(xué)習,下面來一起看看吧。
    2016-10-10

最新評論

乐至县| 治县。| 喀什市| 九寨沟县| 墨竹工卡县| 灵台县| 清原| 冀州市| 渝中区| 六枝特区| 武功县| 石棉县| 呼图壁县| 岢岚县| 浙江省| 阿合奇县| 漠河县| 项城市| 天祝| 南平市| 左权县| 宝清县| 酒泉市| 巴楚县| 偏关县| 临安市| 鸡西市| 东辽县| 清流县| 奉新县| 泗水县| 南江县| 惠来县| 乌兰县| 唐海县| 广河县| 鹿泉市| 繁昌县| 梅河口市| 泰顺县| 呈贡县|