Skip to content

jjzBruce/any2map

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

34 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

any2map

any2map 是一个将可以将数据转为Map的小工具。

目前,此系统包含有以下功能:

  • Excel 转 Map
    • 支持多级标题
    • 支持横向分组

准备

<dependency>
    <groupId>com.modern.tools</groupId>
    <artifactId>any2map</artifactId>
    <version>1.0.0</version>
</dependency>

快速开始

Excel

使用将Excel转为Map的时候,使用文件地址作为数据源。

一般将Excel转Map

String filePath = "path/to/your/file.xlsx";
// 创建转换配置
ExcelConvertConfig config = new ExcelConvertConfig(filePath);
// 创建sheet配置
SheetDataConfig sheetDataConfig = new SheetDataConfig();
// 创建日期时间数据配置,坐标(0, 5)表示是日期时间数据
ExcelDateTypeConfig edtc = new ExcelDateTypeConfig(0, 5);
sheetDataConfig.addExcelDateTypeConfig(edtc);
config.addSheetDataConfig(sheetDataConfig);
// 根据配置创建转换器
MapConverter mc = Any2Map.createMapConverter(config2);
// 输出结果
Map<String, Object> map = mc.toMap();

如下Excel:

image-20250324165642622

输出结果:

{
  "S1": [
    {
      "A": "跨列",
      "B": "跨列",
      "C": "跨行",
      "D": "-",
      "E": "跨行跨列",
      "2000-01-11": "跨行跨列"
    },
    {
      "A": 12.0,
      "B": 1300.0,
      "C": "跨行",
      "D": -1288.0,
      "E": "跨行跨列",
      "2000-01-11": "跨行跨列"
    },
    {
      "A": true,
      "B": false,
      "C": 1300.0,
      "D": 1300.0,
      "E": 1300.0,
      "2000-01-11": 1300.0
    }
  ]
}

将多级Head的Excel转Map

String filePath = "path/to/your/file.xlsx";
// 创建转换配置
ExcelConvertConfig config = new ExcelConvertConfig(filePath);

// 指定数据范围,标题行是[1, 3),数据行从3开始,数据列从1开始
SheetDataRangeConfig.SheetDataRangeBuilder builder = new SheetDataRangeConfig.SheetDataRangeBuilder();
builder.headRowStart(1).headRowEnd(3).dataRowStart(3).dataColumnStart(1);
SheetDataRangeConfig sheetDataRange = builder.build();

// sheet下标为1
SheetDataConfig sheetDataConfig = new SheetDataConfig(1, sheetDataRange);

// 指定多个时间坐标和格式化
ExcelDateTypeConfig edtc = new ExcelDateTypeConfig(
        new int[][]{{4,7}, {5,6}, {5,7}}, "yyyy-MM-dd HH:mm:ss");
sheetDataConfig.addExcelDateTypeConfig(edtc);
config.addSheetDataConfig(sheetDataConfig);
// 根据配置创建转换器
MapConverter mc = Any2Map.createMapConverter(config);
// 输出结果
Map<String, Object> map = mc.toMap();

如下Excel:

image-20250327142313992

输出结果:

{
  "S3": [
    {
      "A": {
        "a": "AaBb1"
      },
      "B": {
        "b1": "AaBb1",
        "b2": "Bb2"
      },
      "C": {
        "c1": 0.0,
        "c2": "Cc2c3",
        "c3d1": "Cc2c3"
      },
      "D": {
        "c3d1": null
      }
    },
    {
      "A": {
        "a": 12.0
      },
      "B": {
        "b1": 1300.0,
        "b2": "Bb2"
      },
      "C": {
        "c1": -1288.0,
        "c2": "Cc2c3",
        "c3d1": "Cc2c3"
      },
      "D": {
        "c3d1": "2022-12-22 00:00:00"
      }
    },
    {
      "A": {
        "a": true
      },
      "B": {
        "b1": false,
        "b2": "Bb2Cc1c2"
      },
      "C": {
        "c1": "Bb2Cc1c2",
        "c2": "Bb2Cc1c2",
        "c3d1": "2022-12-22 00:00:00"
      },
      "D": {
        "c3d1": "2022-12-22 00:00:00"
      }
    }
  ]
}

Excel转Map再进行分组

String filePath = "path/to/your/file.xlsx";
// 创建转换配置
ExcelConvertConfig config = new ExcelConvertConfig(filePath);

// 指定数据范围,标题行是[1, 3),数据行从3开始,分组信息范围是[0, 2), 数据列从2开始
SheetDataRangeConfig.SheetDataRangeBuilder builder = new SheetDataRangeConfig.SheetDataRangeBuilder();
builder.headRowStart(1).headRowEnd(3)
        .groupColumnStart(0).groupColumnEnd(2)
        .dataRowStart(3).dataColumnStart(2);
SheetDataRangeConfig sheetDataRange = builder.build();

// sheet下标为3
SheetDataConfig sheetDataConfig = new SheetDataConfig(3, sheetDataRange);
config.addSheetDataConfig(sheetDataConfig);

// 根据配置创建转换器
MapConverter mc = Any2Map.createMapConverter(config);
// 输出结果
Map<String, Object> map = mc.toMap();

如下Excel:

image-20250402164522746

输出结果:

{
    "S4":
    {
        "分组1":
        {
            "甲":
            {
                "A":
                {
                    "a": "AaBb1"
                },
                "B":
                {
                    "b1": "AaBb1",
                    "b2": "Bb2"
                },
                "C":
                {
                    "c1": 0.0,
                    "c2": "Cc2c3"
                }
            },
            "4":
            {
                "A":
                {
                    "a": 12.0
                },
                "B":
                {
                    "b1": 1300.0,
                    "b2": "Bb2"
                },
                "C":
                {
                    "c1": -1288.0,
                    "c2": "Cc2c3"
                }
            }
        },
        "分组2":
        {
            "乙":
            {
                "A":
                {
                    "a": true
                },
                "B":
                {
                    "b1": false,
                    "b2": "Bb2Cc1c2"
                },
                "C":
                {
                    "c1": "Bb2Cc1c2",
                    "c2": "Bb2Cc1c2"
                }
            }
        }
    }
}

To Do List

  • 测试事件读取 hssf 和 xssf 的效率,确定最大读取大小。优化60M+文件读取
  • Mongo 数据转Map实现
  • Jdbc 数据转Map实现
  • xls 事件读取公式问题

About

convert any data to map

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages