當(dāng)前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
【Java】JSON转EXCEL,支持多个数组生成多个sheet、附表头替换
生活随笔
收集整理的這篇文章主要介紹了
【Java】JSON转EXCEL,支持多个数组生成多个sheet、附表头替换
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
JSON轉(zhuǎn)EXCEL
2022/4/22 周五
參考博客 JAVA-JSON文件轉(zhuǎn)excel文件 ,使用的是HSSFWorkbook。
我修改后添加了可生成多個(gè)sheet,sheet頁名為JSON參數(shù)數(shù)組的節(jié)點(diǎn)名稱,可替換節(jié)點(diǎn)名稱,以及把參數(shù)的英文字段名替換為中文表頭。
0積分下載demo:JSON轉(zhuǎn)EXCEL
先貼json轉(zhuǎn)excel方法,參數(shù)為要生成的文件名路徑、要轉(zhuǎn)換的json串、json數(shù)組的節(jié)點(diǎn)名稱(作為生成的sheet頁名):
public static void jsonToExcel(String fileName, JSONObject jsonObject, String[] ArrayKeys) throws Exception {// 創(chuàng)建HSSFWorkbook對象HSSFWorkbook wb = new HSSFWorkbook();// 多個(gè)數(shù)組的建成多個(gè)sheetfor (String arrayKey : ArrayKeys) {// 創(chuàng)建HSSFSheet對象HSSFSheet sheet = wb.createSheet(ArrayKeys.length > 1 ? arrayKey : "sheet"); // 因?yàn)閼械枚嘞朊?#xff0c;如果只有一個(gè)sheet頁我就不設(shè)置名稱了Set keys = null;int rowNo = 0;HSSFRow row = sheet.createRow(0);JSONArray jsonArray = jsonObject.getJSONArray(arrayKey);//獲取標(biāo)題for (int i = 0; i < jsonArray.size(); i++) {if (keys == null) {JSONObject item = jsonArray.getJSONObject(i);keys = item.keySet();for (Object s : keys) {HSSFCell cell = row.createCell(rowNo++);cell.setCellValue(s.toString());}} else {break;}}// 獲取數(shù)據(jù)一次循環(huán)一行for (int i = 0; i < jsonArray.size(); i++) {rowNo = 0;JSONObject item = jsonArray.getJSONObject(i);row = sheet.createRow(i + 1);keys = item.keySet();for (Object s : keys) {HSSFCell cell = row.createCell(rowNo++);cell.setCellValue(item.getString(s.toString()));}}}// 創(chuàng)建Excel文件File file = new File(fileName);file.createNewFile();// 輸出到Excel文件FileOutputStream output = new FileOutputStream(fileName);wb.write(output);wb.close();output.flush();output.close();}再給一個(gè)調(diào)用示例,包括把從數(shù)據(jù)庫查出的英文的字段名替換為中文表頭(注意名稱不要有重復(fù),否則重復(fù)的列就會(huì)少,因?yàn)楸桓采w了):
public static void main(String[] args) throws Exception {// TODO:從接口獲取數(shù)據(jù) // String ret = HttpUtils.sendPost("url","param");String ret = "這里是JSON串";System.out.println("接口返回參數(shù):" + ret);// 替換表頭String replace = ret.replaceAll("BY_MONTH_INC", "當(dāng)月同比").replaceAll("BY_YEAR_INC", "當(dāng)年同比").replaceAll("BY_DATE", "當(dāng)日(萬元)").replaceAll("BY_MONTH", "當(dāng)月(萬元)").replaceAll("BY_YEAR", "當(dāng)年(萬元)")// 也可以把JSON數(shù)組的節(jié)點(diǎn)名稱替換掉,這樣sheet頁的名稱也替換成了想要的文字.replaceAll("DATA1", "數(shù)據(jù)一").replaceAll("DATA2", "數(shù)據(jù)二");JSONObject jsonObject = JSONObject.parseObject(replace, Feature.OrderedField);// 設(shè)置數(shù)組的節(jié)點(diǎn)名稱 // String[]ArrayKeys = new String[]{"DATA1","DATA2"};String[]ArrayKeys = new String[]{"數(shù)據(jù)一","數(shù)據(jù)二"};// 設(shè)置生成的文件名及路徑String fileName = "C:/User/Desktop/test.xlsx";// 調(diào)用轉(zhuǎn)換方法jsonToExcel(fileName, jsonObject, ArrayKeys);System.out.println("生成文件成功:"+fileName);}測試JSON串如下:
{"DATA1":[{"BY_DATE":"263.38","BY_MONTH":"4391.58","BY_MONTH_INC":"-27.79%","BY_YEAR":"20356.44","BY_YEAR_INC":"-14.87%"},{"BY_DATE":"91.81","BY_MONTH":"1087.39","BY_MONTH_INC":"-27.00%","BY_YEAR":"5879.43","BY_YEAR_INC":"-12.10%"},{"BY_DATE":"40.29","BY_MONTH":"533.51","BY_MONTH_INC":"-30.89%","BY_YEAR":"2937.50","BY_YEAR_INC":"-27.67%"}],"DATA2":[{"BY_DATE":"123.38","BY_MONTH":"123.58","BY_MONTH_INC":"-12.79%","BY_YEAR":"12345.44","BY_YEAR_INC":"-12.87%"},{"BY_DATE":"12.81","BY_MONTH":"1234.39","BY_MONTH_INC":"-12.00%","BY_YEAR":"1234.43","BY_YEAR_INC":"-12.10%"},{"BY_DATE":"98.29","BY_MONTH":"987.51","BY_MONTH_INC":"-98.89%","BY_YEAR":"9876.50","BY_YEAR_INC":"-89.67%"}] }生成的excel:
總結(jié)
以上是生活随笔為你收集整理的【Java】JSON转EXCEL,支持多个数组生成多个sheet、附表头替换的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 每日一题(16)—— 声明和定义的区别
- 下一篇: gradle idea java ssm