写点什么

Excel 数据转换为一对多的工具类

作者:alexgaoyh
  • 2024-01-15
    河南
  • 本文字数:1362 字

    阅读完需:约 4 分钟

背景

  《Excel 数据转换为一对多的工具类》在 ERP 类的软件中,会存在大量的 Excel 导入导出功能,本文提供一种工具,将 Excel 中多个 Sheet 中的数据,转换为一对多的关系,并且支持自定义关联的关联关系设定。

示例

   Excel 中 SheetName=='订单头'的数据



   Excel 中 SheetName=='订单明细'的数据



   转换为一对多的关系,出参结构为:


[    {        订单编号=PAP20240101101010, 收货人=ALEXGAOYH, 收货电话=13800138000,                 收货地址=pap.net.cn, cn_net_pap_index=1,         cn_net_pap_child= [            {订单编号=PAP20240101101010, 收货人=ALEXGAOYH, 收货电话=13800138000, 收货地址=pap.net.cn, SKU编号=SKU000001, 数量=1, cn_net_pap_index=1},             {订单编号=PAP20240101101010, 收货人=ALEXGAOYH, 收货电话=13800138000, 收货地址=pap.net.cn, SKU编号=SKU000002, 数量=2, cn_net_pap_index=2},             {订单编号=PAP20240101101010, 收货人=ALEXGAOYH, 收货电话=13800138000, 收货地址=pap.net.cn, SKU编号=SKU000003, 数量=3, cn_net_pap_index=3}        ]    },    {        订单编号=PAP20240101101011, 收货人=ALEXGAOYH, 收货电话=13800138000,                 收货地址=河南省, cn_net_pap_index=2,         cn_net_pap_child= [            {订单编号=PAP20240101101011, 收货人=ALEXGAOYH, 收货电话=13800138000, 收货地址=河南省, SKU编号=SKU000004, 数量=4, cn_net_pap_index=4},             {订单编号=PAP20240101101011, 收货人=ALEXGAOYH, 收货电话=13800138000, 收货地址=河南省, SKU编号=SKU000005, 数量=5, cn_net_pap_index=5},             {订单编号=PAP20240101101011, 收货人=ALEXGAOYH, 收货电话=13800138000, 收货地址=河南省, SKU编号=SKU000006, 数量=6, cn_net_pap_index=6},             {订单编号=PAP20240101101011, 收货人=ALEXGAOYH, 收货电话=13800138000, 收货地址=河南省, SKU编号=SKU000007, 数量=7, cn_net_pap_index=7}        ]    }]
复制代码

调用方法

   此方法分别传入 head-excel、detail-excel 对应的文件绝对路径和 sheetName,之后设定两个 sheet 对应的字段关联关系,本例是将 '订单编号-收货人-收货电话' 一起当做两个 sheet 的业务关联字段,之后设置 顺序号和一对多的字段名称。顺序号是为了如果导入失败,友好的展示出来数据在文件中的第几行,一对多字段是为了防止字段重复。


public class ExcelUtilTest {    @Test    public void extract() {        String excelAbsolutePath = "test.xlsx";
List<CompareDTO> compareDTOS = new ArrayList<>(); compareDTOS.add(new CompareDTO("订单编号", "订单编号")); compareDTOS.add(new CompareDTO("收货人", "收货人")); compareDTOS.add(new CompareDTO("收货电话", "收货电话"));
List<Map<String, Object>> oneToManyRowList = ExcelUtil.getOneToManyRowList(excelAbsolutePath, "订单头", excelAbsolutePath, "订单明细", compareDTOS, "cn_net_pap_index", "cn_net_pap_child"); }}
复制代码

参考

  1. http://pap-docs.pap.net.cn/

  2. https://gitee.com/alexgaoyh


发布于: 刚刚阅读数: 6
用户头像

alexgaoyh

关注

DevOps 2013-12-08 加入

https://gitee.com/alexgaoyh

评论

发布
暂无评论
Excel数据转换为一对多的工具类_Java_alexgaoyh_InfoQ写作社区