Excel中的数据转换为JSON格式

Excel中的数据转换为JSON格式

需求背景

在日常开发操作中,偶尔会有需要修复的脏数据。一般现场的用户会把需要修改的文件制作成Excel表格,然后开发人员处理这些数据一般使用postman等工具调用接口进行修复。接口入参一般为JSON格式。对于少量数据可以直接手动转换,但对于大量数据,手动转换时间成本较高,且容易出错,所以开发一个Excel转JSON的小工具。

开发流程

  1. 读取Excel文件内容,首行​作为key,其余每行作为value
  2. 对key和value按照JSON的格式进行拼接
  3. 以String格式写入.txt文件

代码实现

/**
     * excel中的数据转换为JSON格式 手动写入excel地址,直接在本地跑方法
     */
    public static StringBuilder excelByPath() throws Exception {
        StringBuilder excelToJson = new StringBuilder();
        //excel文件地址
        File file = new File("C:\\Users\\xxx\\Desktop\\test.xlsx");
        if (!file.exists()){
            throw new Exception("文件不存在!");
        }
        InputStream in = new FileInputStream(file);

        // 读取整个Excel
        XSSFWorkbook sheets = new XSSFWorkbook(in);
        // 获取第一个表单Sheet
        XSSFSheet sheetAt = sheets.getSheetAt(0);

        //默认第一行为标题行,i = 0
        XSSFRow titleRow = sheetAt.getRow(0);

        // 循环获取每一行数据
        for (int i = 1; i < sheetAt.getPhysicalNumberOfRows(); i++) {
            XSSFRow row = sheetAt.getRow(i);
            // 读取每一格内容
            StringBuilder sbCell = new StringBuilder();
            StringBuilder sbTitle = new StringBuilder();
            StringBuilder sbJson = new StringBuilder();
            for (int index = 0; index < row.getPhysicalNumberOfCells(); index++) {
                //title
                XSSFCell titleCell = titleRow.getCell(index);
                XSSFCell cell = row.getCell(index);
                titleCell.setCellType(CellType.STRING);
                cell.setCellType(CellType.STRING);
                if (cell.getStringCellValue().equals("")) {
                    continue;
                }
                sbTitle.append(titleCell);
                sbCell.append(cell);
                if (index == row.getPhysicalNumberOfCells() -1) {
                    sbJson.append("\t" + "\""+ titleCell + "\":" + "\"" + cell + "\"" );
                } else {
                    sbJson.append("\t" + "\""+ titleCell + "\":" + "\"" + cell + "\",\n" );
                }

            }
            if (i == 1) {
                excelToJson.append("[{\n" + sbJson + "\n},");
            } else if (i == sheetAt.getPhysicalNumberOfRows()-1) {
                excelToJson.append("{\n" + sbJson + "\n}\n]");
            } else {
                excelToJson.append("{\n" + sbJson + "\n},");
            }
        }
        return excelToJson;
    }

 /**
     *     输出字符串另存为txt文件
     */
    public static void saveAsTxt() throws Exception {
        //文件保存地址
        File outFile = new File("C:\\Users\\xxx\\Desktop\\" + DateUtils.getCurrentTime(DATETIME_FORMAT_STR) + ".txt");

        //检查文件是否存在,如果存在退出,注释掉这一段将实现重写覆盖
        if (outFile.exists()) {
            System.out.println("File already exists!");
            System.exit(1);
        }

        //如果不存在则写入文件
        // 制定编码方式为 UTF-8
        PrintWriter printWriter = new PrintWriter(outFile, "UTF-8");
        StringBuilder stringBuilder = excelByPath();
        printWriter.print(stringBuilder);

        //释放资源
        printWriter.close();
    }

程序扩展

可以写一个前端页面,在页面弹窗选择文件,然后导出.txt文件到默认地址,这样就不用手动修改路径了。

你可能感兴趣的:(Java,个人理解,excel,json,java)