Java 將 json 數組轉為 excel 和 csv 並下載


准備

1.需要一個 json 數據數組,格式如下

[
  {
    "screenWidth": 1280,
    "trackState": 1
  },
  {
    "screenWidth": 1280,
    "trackState": 1
  },
  {
    "screenWidth": 1280,
    "trackState": 1
  },
  {
    "screenWidth": 1280,
    "trackState": 1
  }
]

2.工具包(操作JSON)

<dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.3.8</version>
        </dependency>

轉為 excel 並下載

1.導入依賴

<dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.14</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.14</version>
        </dependency>

2. json 轉 excel

     /**
     * json 轉 excel
     * @param jsonArray
     * @return
     * @throws IOException
     */
    public static HSSFWorkbook jsonToExcel(JSONArray jsonArray) throws IOException {
        Set<String> keys = null;
        // 創建HSSFWorkbook對象
        HSSFWorkbook wb = new HSSFWorkbook();
        // 創建HSSFSheet對象
        HSSFSheet sheet = wb.createSheet("sheet0");

        String str = null;
        int roleNo = 0;
        int rowNo = 0;
        List<JSONObject> jsonObjects = jsonArray.toList(JSONObject.class);

        // 創建HSSFRow對象
        HSSFRow row = sheet.createRow(roleNo++);
        // 創建HSSFCell對象
        //標題
        keys = jsonObjects.get(0).keySet();
        for (String s : keys) {
            HSSFCell cell = row.createCell(rowNo++);
            cell.setCellValue(s);
        }
        rowNo = 0;
        for (JSONObject jsonObject : jsonObjects) {
            row = sheet.createRow(roleNo++);
            for (String s : keys) {
                HSSFCell cell = row.createCell(rowNo++);
                cell.setCellValue(jsonObject.getStr(s));
            }
            rowNo = 0;
        }
        return wb;
    }

3.下載

 @GetMapping("/index/dataDownload/excel")
    @ResponseBody
    public Result exportExcel(String ip, String name, HttpServletResponse response) {
        try{
            //此處為你的json數組
            HSSFWorkbook sheets = jsonToExcel()
            // 配置文件下載
            response.setHeader("content-type", "application/octet-stream");
            response.setContentType("application/octet-stream");
            // 下載文件能正常顯示中文
            response.setHeader("Content-Disposition", "attachment;filename=data.xls");
            OutputStream os = response.getOutputStream();
            sheets.write(os);
            sheets.close();
            os.close();
            return null;
        } catch (Exception e) {
            e.printStackTrace();
            return new Result(500, e.getMessage());
        }
    }

json 轉為 csv 並 下載

1.導包

<dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-csv</artifactId>
            <version>1.5</version>
        </dependency>

2.轉換並下載

    @GetMapping("/index/dataDownload/csv")
    @ResponseBody
    public Result exportCsv(String ip, String name, HttpServletResponse response) {
        try{
            // 配置文件下載
            response.setHeader("content-type", "application/octet-stream");
            response.setContentType("application/octet-stream");
            // 下載文件能正常顯示中文
            response.setHeader("Content-Disposition", "attachment;filename=data.csv");
            OutputStream os = response.getOutputStream();
            OutputStreamWriter osw = new OutputStreamWriter(os, "GBK");
            // 此處替換為你的 json 數組
            List<JSONObject> list = clusterService.exportCsv(ip, name);

            Set<String> set = list.get(0).keySet();
            List<String> keys = new ArrayList<>(set);

            String[] strings = keys.toArray(new String[keys.size()]);
            CSVFormat csvFormat = CSVFormat.DEFAULT.withHeader(strings);
            CSVPrinter csvPrinter = new CSVPrinter(osw, csvFormat);
            Iterator<JSONObject> iterator = list.iterator();
            while(iterator.hasNext()) {
                Map<String, String> map = new HashMap<>();
                JSONObject next = iterator.next();
                StringBuilder str = new StringBuilder();
                for(String key : keys) {
//                    str.append(next.getStr(key)).append(",");
                    csvPrinter.print(next.getStr(key));
                }
//                str = new StringBuilder(str.substring(0, str.length() - 1));
                csvPrinter.printRecord();
            }
            csvPrinter.flush();
            csvPrinter.close();
            return null;
        } catch (Exception e) {
            e.printStackTrace();
            return new Result(500, e.getMessage());
        }
    }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM