为了整理用户数据,做出分析,我将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>
2 、 编写代码
1.建立一个工具
2.创建文件对象
Workbook workbook;
workbook = Workbook.getWorkbook(new File( "C:\\Users\\HuangZhihang\\Desktop\\123.xls"));
workbook.getNumberOfSheets()
3.创建表的对象Sheet sheet;
- 可以输出表的名字
System.out.println(sheet.getName());
sheet.getRows()
sheet.getColumns()
4.创建单元控制对象
Cell cell;
cell = sheet.getCell(j , i);
String title = cellTitle.getContents();
cell.getType();//得到类型,返回值,是一个CellType
//可以用
cell.getType().toString()与字符串比较做出判断
5.json对象的相关命令
JSONArray jsons = new JSONArray();
jsons.add(object);
JSONObject object = new JSONObject(new LinkedHashMap());
object.put(title, -1);
对表格的数据进行处理
遇到的问题 饮酒类型
饮酒在系统中是单选,在数据中出现了白酒啤酒两个选择,我将其改为了4
采用表格中的提取数组功能,去掉年月日
解决在json每一个行中的加入注释问题
想做到这个情况
{
name:测试,
}
思路中只能提供,把注释当对象加入在后边的value中,然后在编译完成,以后用text中的替换功能进行替换
json转为yml以后出现引号的问题
单纯在json下看不出来
因为属性中有连字符默认或者是/当成字符串进行处理了,删除数据中的连字符
解决JSONObject 新建对象以后,使用object.put,放进去的数据与想要保持的顺序不一样
例如,只是哥例子
object.put(“a”,1);
object.put(“c”,2);
实际转换输出的json是c在前,a在后
JSONObject object = new JSONObject();
此时存储以Hashmap,进行存储,根据key关键字进行排序
JSONObject object = new JSONObject(new LinkedHashMap());
整体代码
只需要更改输入地址,跟输出地址的绝对路径就可以使用,一定在pom里导入上边maven的包
public class ExcleToJsonUntils {
public static void main(String[] args) {
Workbook workbook= null;
Sheet sheet = null;
int sheettall;
Cell cell= null;
Cell cellTitle= null;
Cell cellRemark= null;
int rows=0;
int column=0;
JSONArray jsons = new JSONArray();
try {
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++){
cell = sheet.getCell(j , q);
cellTitle = sheet.getCell(j , 0);
cellRemark = sheet.getCell(j , 1);
String title = cellTitle.getContents();
String remarks=cellRemark.getContents();
String content=cell.getContents();
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();
}
}
public static boolean createJsonFile(Object jsonData, String filePath) {
String content = JSON.toJSONString(jsonData, SerializerFeature.PrettyFormat, SerializerFeature.WriteMapNullValue,
SerializerFeature.WriteDateUseDateFormat);
boolean flag = true;
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;
}
}
|