欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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ù)雜的,還需要進(jìn)行整理,如果有什么意見,請?zhí)岢鰜?,我及時改進(jìn)…謝謝

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

相關(guān)文章

  • 使用Springboot封裝一個自適配的數(shù)據(jù)單位轉(zhuǎn)換工具類

    使用Springboot封裝一個自適配的數(shù)據(jù)單位轉(zhuǎn)換工具類

    我們在接收前臺傳輸?shù)臄?shù)據(jù)時,往往SpringBoot使用內(nèi)置的數(shù)據(jù)類型轉(zhuǎn)換器把我們提交的數(shù)據(jù)自動封裝成對象等類型,下面這篇文章主要給大家介紹了關(guān)于使用Springboot封裝一個自適配的數(shù)據(jù)單位轉(zhuǎn)換工具類的相關(guān)資料,需要的朋友可以參考下
    2023-03-03
  • spring boot中的properties參數(shù)配置詳解

    spring boot中的properties參數(shù)配置詳解

    這篇文章主要介紹了spring boot中的properties參數(shù)配置,需要的朋友可以參考下
    2017-09-09
  • Java如何根據(jù)實體指定字段值對其List進(jìn)行排序詳解

    Java如何根據(jù)實體指定字段值對其List進(jìn)行排序詳解

    在Java項目中可能會遇到給出一些條件,將List元素按照給定條件進(jìn)行排序的情況,這篇文章主要給大家介紹了關(guān)于Java如何根據(jù)實體指定字段值對其List進(jìn)行排序的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-07-07
  • Java利用ITextPdf庫生成PDF預(yù)覽文件的具體實現(xiàn)

    Java利用ITextPdf庫生成PDF預(yù)覽文件的具體實現(xiàn)

    這篇文章主要給大家介紹了Java利用ITextPdf庫生成PDF預(yù)覽文件的具體實現(xiàn),文中通過代碼示例和圖文給大家介紹的非常詳細(xì),具有一定的參考價值,需要的朋友可以參考下
    2024-04-04
  • Java中方法的重載與重寫舉例比較

    Java中方法的重載與重寫舉例比較

    這篇文章主要給大家介紹了關(guān)于Java中方法的重載與重寫的相關(guān)資料,Java中的方法重載和重寫是面向?qū)ο缶幊讨械膬蓚€重要概念,文中介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07
  • Java如何優(yōu)雅地避免空指針異常(NullPointerException)

    Java如何優(yōu)雅地避免空指針異常(NullPointerException)

    這篇文章主要給大家介紹了關(guān)于Java如何優(yōu)雅地避免空指針異常(NullPointerException)的相關(guān)資料,空指針異常(NullPointerException)是一種常見的運行時異常,它在Java編程中經(jīng)常出現(xiàn),需要的朋友可以參考下
    2024-03-03
  • 學(xué)生信息管理系統(tǒng)java版

    學(xué)生信息管理系統(tǒng)java版

    這篇文章主要為大家詳細(xì)介紹了java學(xué)生信息管理系統(tǒng)源代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • idea 開發(fā)神器之idea插件匯總

    idea 開發(fā)神器之idea插件匯總

    這篇文章主要介紹了idea 開發(fā)神器之idea插件匯總,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • Java 其中翻轉(zhuǎn)字符串的實現(xiàn)方法

    Java 其中翻轉(zhuǎn)字符串的實現(xiàn)方法

    這篇文章主要介紹了Java 其中翻轉(zhuǎn)字符串的實現(xiàn)方法,需要的朋友可以參考下
    2014-02-02
  • java實現(xiàn)兩臺服務(wù)器間文件復(fù)制的方法

    java實現(xiàn)兩臺服務(wù)器間文件復(fù)制的方法

    這篇文章主要介紹了java實現(xiàn)兩臺服務(wù)器間文件復(fù)制的方法,是對單臺服務(wù)器上文件復(fù)制功能的升級與改進(jìn),具有一定參考借鑒價值,需要的朋友可以參考下
    2015-01-01

最新評論