[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;
}
}
註解雖然是英文的,個人還是覺得挺直覺得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;
}
}
留言
張貼留言