[java]xlsx to json using apache poi

Xlsx to JsonArray

註解雖然是英文的,個人還是覺得挺直覺得XD
需要自取,自行參閱。
好處是說當遇到很大的Excel要用,但又不想數格子數到瘋掉很好用。
缺點是說需要再針對excel再處理一次,數格子來寫當然就程式的執行來說比較快。
但眼睛也會花花花,不小心匯錯更麻煩。

大檔處理我沒解決(因為我遇到的是100*10000)UP的data
如果有前輩看得的話可以提供給我幾個關鍵字去找相關data
目前看到的是JAVA SAX,但好亂>"<

code :


import java.io.File;
import java.io.IOException;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Row.MissingCellPolicy;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.json.JSONArray;
import org.json.JSONObject;

/**
 * Xlsx tojson
 *
 * @author bonder chou
 */
public class Xlsx {

  /**
   * Xlsx to JSONARRAY first row is jsonKey , others row is data row
   *
   * @see
   * https://poi.apache.org/apidocs/org/apache/poi/ss/usermodel/class-use/Row.MissingCellPolicy.html
   * @param path excel path
   * @param policy about who to deal null and blank
   * @return
   * @throws IOException
   * @throws InvalidFormatException
   */
  static public JSONArray getXlsxToJsonarray(String path, MissingCellPolicy policy) throws IOException, InvalidFormatException {
    //file path
    File f = new File(path);
    //creat workbool
    Workbook wb = WorkbookFactory.create(f);
    //release file( i don't real sure does it real work )
    f = null;  
    //get sheet 0
    Sheet sheet = wb.getSheetAt(0);
    //title row
    Row titleRow = sheet.getRow(0);
    //data row
    Row dataRow = null;
    //data story array
    JSONArray ja = new JSONArray();
    // tmp json
    JSONObject jtmp = null;
    //for all row without first row(title row)
    for (int i = 1; i <= sheet.getLastRowNum(); i++) {
      //creat tmp
      jtmp = new JSONObject();
      //get datarow
      dataRow = sheet.getRow(i);
      //get title row  push key and data
      for (int j = 0; j < titleRow.getLastCellNum(); j++) {
        jtmp.put(
                titleRow.getCell(j, policy).getStringCellValue(),
                dataRow.getCell(j, policy).getStringCellValue());
      }
      ja.put(jtmp);    
    }
    return ja;
  }
}

留言

這個網誌中的熱門文章

[java]半型轉全型

[java]BIG5 字集判斷

[javascript]當月第一天、當月最後一天