當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
【Java】JSON转EXCEL,支持多个数组生成多个sheet、附表头替换
生活随笔
收集整理的這篇文章主要介紹了
【Java】JSON转EXCEL,支持多个数组生成多个sheet、附表头替换
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
JSON轉EXCEL
2022/4/22 周五
參考博客 JAVA-JSON文件轉excel文件 ,使用的是HSSFWorkbook。
我修改后添加了可生成多個sheet,sheet頁名為JSON參數數組的節點名稱,可替換節點名稱,以及把參數的英文字段名替換為中文表頭。
0積分下載demo:JSON轉EXCEL
先貼json轉excel方法,參數為要生成的文件名路徑、要轉換的json串、json數組的節點名稱(作為生成的sheet頁名):
public static void jsonToExcel(String fileName, JSONObject jsonObject, String[] ArrayKeys) throws Exception {// 創建HSSFWorkbook對象HSSFWorkbook wb = new HSSFWorkbook();// 多個數組的建成多個sheetfor (String arrayKey : ArrayKeys) {// 創建HSSFSheet對象HSSFSheet sheet = wb.createSheet(ArrayKeys.length > 1 ? arrayKey : "sheet"); // 因為懶得多想名字,如果只有一個sheet頁我就不設置名稱了Set keys = null;int rowNo = 0;HSSFRow row = sheet.createRow(0);JSONArray jsonArray = jsonObject.getJSONArray(arrayKey);//獲取標題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;}}// 獲取數據一次循環一行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()));}}}// 創建Excel文件File file = new File(fileName);file.createNewFile();// 輸出到Excel文件FileOutputStream output = new FileOutputStream(fileName);wb.write(output);wb.close();output.flush();output.close();}再給一個調用示例,包括把從數據庫查出的英文的字段名替換為中文表頭(注意名稱不要有重復,否則重復的列就會少,因為被覆蓋了):
public static void main(String[] args) throws Exception {// TODO:從接口獲取數據 // String ret = HttpUtils.sendPost("url","param");String ret = "這里是JSON串";System.out.println("接口返回參數:" + ret);// 替換表頭String replace = ret.replaceAll("BY_MONTH_INC", "當月同比").replaceAll("BY_YEAR_INC", "當年同比").replaceAll("BY_DATE", "當日(萬元)").replaceAll("BY_MONTH", "當月(萬元)").replaceAll("BY_YEAR", "當年(萬元)")// 也可以把JSON數組的節點名稱替換掉,這樣sheet頁的名稱也替換成了想要的文字.replaceAll("DATA1", "數據一").replaceAll("DATA2", "數據二");JSONObject jsonObject = JSONObject.parseObject(replace, Feature.OrderedField);// 設置數組的節點名稱 // String[]ArrayKeys = new String[]{"DATA1","DATA2"};String[]ArrayKeys = new String[]{"數據一","數據二"};// 設置生成的文件名及路徑String fileName = "C:/User/Desktop/test.xlsx";// 調用轉換方法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:
總結
以上是生活随笔為你收集整理的【Java】JSON转EXCEL,支持多个数组生成多个sheet、附表头替换的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 每日一题(16)—— 声明和定义的区别
- 下一篇: STM32项目(一) —— 展示车座椅