溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

利用Java怎么將excel表格轉換成json數據

發布時間:2020-12-07 16:53:50 來源:億速云 閱讀:433 作者:Leah 欄目:編程語言

利用Java怎么將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表格模板類型和調用方式

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

利用Java怎么將excel表格轉換成json數據

調用方法如下:

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

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

利用Java怎么將excel表格轉換成json數據

調用方法如下:

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

利用Java怎么將excel表格轉換成json數據

  //表格的名稱為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數據的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女