IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> 利用java将excle转换为json数据详细代码以及实现流程加入一些常见的业务判断 -> 正文阅读

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

为了整理用户数据,做出分析,我将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;
    }
}
  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2022-04-04 12:40:45  更:2022-04-04 12:42:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/18 1:41:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码