首页 前端知识 利用java将excle转换为json数据,详细代码以及实现流程,加入一些常见的业务判断

利用java将excle转换为json数据,详细代码以及实现流程,加入一些常见的业务判断

2024-02-06 15:02:24 前端知识 前端哥 624 552 我要收藏

为了整理用户数据,做出分析,我将excle表转换成json,再转换称yml,主要采用了jxl工具包

技术的确定

初步定于以java实现

参考:https://blog.csdn.net/qq_27993003/article/details/52488403

具体实现

1.导入依赖包,前提配置好maven

<dependencies>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.7</version>
    </dependency>
    <dependency>
        <groupId>net.sourceforge.jexcelapi</groupId>
        <artifactId>jxl</artifactId>
        <version>2.6.10</version>
    </dependency>
</dependencies>

image-20220331224509639

2 、 编写代码

1.建立一个工具

image-20220331230039690

2.创建文件对象

Workbook workbook;//这个代表打开了几个文件,第几个文件
//这里只支持.xls,获取一个文件
workbook = Workbook.getWorkbook(new File( "C:\\Users\\HuangZhihang\\Desktop\\123.xls"));
workbook.getNumberOfSheets()//得到一个文件中有几个表,注意输出的是确确实实的个数

3.创建表的对象Sheet sheet;

image-20220331231448665

  1. 可以输出表的名字
System.out.println(sheet.getName());
sheet.getRows()//一个表中记录数,即行数
sheet.getColumns()//记录一个表的列数

4.创建单元控制对象

Cell cell; //单个控制单元
cell = sheet.getCell(j , i);//得到单元格 j代表行,q代表列
String title = cellTitle.getContents();//得到相关的数据
cell.getType();//得到类型,返回值,是一个CellType
//可以用
cell.getType().toString()与字符串比较做出判断

image-20220402115721178image-20220402115750383

5.json对象的相关命令

 //创建json对象
JSONArray jsons = new JSONArray();
//将对象加入
 jsons.add(object);
JSONObject object = new JSONObject(new LinkedHashMap());//创建json里的每个对象
 object.put(title, -1);//往里边放每一行的数据

对表格的数据进行处理

遇到的问题 饮酒类型

饮酒在系统中是单选,在数据中出现了白酒啤酒两个选择,我将其改为了4

采用表格中的提取数组功能,去掉年月日

image-20220401222141334

解决在json每一个行中的加入注释问题

想做到这个情况

{
    name:测试,//这是注释
}

思路中只能提供,把注释当对象加入在后边的value中,然后在编译完成,以后用text中的替换功能进行替换

json转为yml以后出现引号的问题

单纯在json下看不出来

image-20220402100515464

因为属性中有连字符默认或者是/当成字符串进行处理了,删除数据中的连字符

解决JSONObject 新建对象以后,使用object.put,放进去的数据与想要保持的顺序不一样

例如,只是哥例子

object.put(“a”,1);

object.put(“c”,2);

实际转换输出的json是c在前,a在后

JSONObject object = new JSONObject();

此时存储以Hashmap,进行存储,根据key关键字进行排序

image-20220402104000750

JSONObject object = new JSONObject(new LinkedHashMap());

整体代码

只需要更改输入地址,跟输出地址的绝对路径就可以使用,一定在pom里导入上边maven的包

image-20220402120957899

public class ExcleToJsonUntils {
    public static void main(String[] args) {

        Workbook workbook= null;
        Sheet sheet = null;
        //sheettall,代表总页数
        int sheettall;
        //cell:表示普通单元格

        Cell cell= null;
        //cellTitle:表示第一行数据
        Cell cellTitle= null;
        //表示备注单元格
        Cell cellRemark= null;

        //rows:代表行,column代表列,rows是总行数,从0开始,由于第一行
        int rows=0;
        int column=0;
         //创建json对象
        JSONArray jsons = new JSONArray();

        try {
            //获取一个Excel文件  只支持.xls格式
            workbook = Workbook.getWorkbook(new File( "C:\\Users\\HuangZhihang\\Desktop\\test.xls"));
            //获取文件里的全部表的总数量,这里可以用于外循环,由于我的项目中只有一页,所以不用别的
            sheettall=workbook.getNumberOfSheets();
            //可以理解为得到一个数组对象对象,
            for (int i = 0; i < 1; i++) {
                sheet = workbook.getSheet(i);
                rows= sheet.getRows();
                column= sheet.getColumns();

                for(int q = 2; q <rows ; q++) {
                    JSONObject object = new JSONObject(new LinkedHashMap());
                    for(int j = 0; j < sheet.getColumns(); j++){
                        //sheet.getCell(列,行);
                        cell = sheet.getCell(j , q);
                        cellTitle = sheet.getCell(j , 0);
                        cellRemark = sheet.getCell(j , 1);
                        //每次循环得到标题
                        String title = cellTitle.getContents();
                        //  System.out.println("该单元格类型"+cell.getType());
                         //每次循环得到备注
                        String remarks=cellRemark.getContents();

                        String content=cell.getContents();
                        //判断是否是叠加加1的关键字,如果不为空就执行分割,如果为空就填入-1
                        if(j==42||j==44){
                            if (!cell.getType().toString().equals("Empty")){
                                int   total =  DataSparate.iscount(content);
                                object.put(title, total);
                                continue;
                            }else{
                                object.put(title, -1);
                            }

                        }
                    //根据单元格内容不同,加入不同的格式,避免出现全是字符串
                        switch (cell.getType().toString()){
                            case "Label":
                            object.put(title, content);
                                break;
                            case  "Number":

                                Double number=new Double(cell.getContents());
 
                                object.put(title, number);
                                break;
                            case "Empty":
                 
                                object.put(title,-1);

                                break;
                            default:
                                String scontent=cell.getContents();
           
                                object.put(title, scontent);
                        }
                        //得到对应的单元格


                    }

                    jsons.add(object);



                }


            }

            //对队列进行输出或者其他操作
            System.out.println(jsons.toJSONString());
            createJsonFile(jsons,"C:\\Users\\HuangZhihang\\Desktop\\ceshi.json");
            workbook.close();
        } catch (BiffException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
   //实现文件输出的静态方法,参数值分别为,地址与json数据包
    public static boolean createJsonFile(Object jsonData, String filePath) {
        String content = JSON.toJSONString(jsonData, SerializerFeature.PrettyFormat, SerializerFeature.WriteMapNullValue,
                SerializerFeature.WriteDateUseDateFormat);
        // 标记文件生成是否成功
        boolean flag = true;
        // 生成json格式文件
        try {
            // 保证创建一个新文件
            File file = new File(filePath);
            if (!file.getParentFile().exists()) { // 如果父目录不存在,创建父目录
                file.getParentFile().mkdirs();
            }
            if (file.exists()) { // 如果已存在,删除旧文件
                file.delete();
            }
            file.createNewFile();
            // 将格式化后的字符串写入文件
            Writer write = new OutputStreamWriter(new FileOutputStream(file), "UTF-8");
            write.write(content);
            write.flush();
            write.close();
        } catch (Exception e) {
            flag = false;
            e.printStackTrace();
        }
        return flag;
    }


}

数组切割

package com.xiucai.untils;

import org.junit.Test;

/**
 * 数据分割
 */
public class DataSparate {
    public static void main(String[] args) {
        iscount("");
    }
     //计算传入数据,分割以后有几部分

    public static int iscount (String data){

        String[] strArr =data.split("、");
        System.out.println(strArr.length);
        return strArr.length;
    }
}
转载请注明出处或者链接地址:https://www.qianduange.cn//article/1476.html
标签
jsonc
评论
发布的文章
大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!