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

背景

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

示例

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

订单编号收货人收货电话收货地址
PAP20240101101010ALEXGAOYH13800138000pap.net.cn
PAP20240101101011ALEXGAOYH13800138000河南省

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

订单编号收货人收货电话收货地址SKU编号数量
PAP20240101101010ALEXGAOYH13800138000pap.net.cnSKU0000011
PAP20240101101010ALEXGAOYH13800138000pap.net.cnSKU0000022
PAP20240101101010ALEXGAOYH13800138000pap.net.cnSKU0000033
PAP20240101101011ALEXGAOYH13800138000河南省SKU0000044
PAP20240101101011ALEXGAOYH13800138000河南省SKU0000055
PAP20240101101011ALEXGAOYH13800138000河南省SKU0000066
PAP20240101101011ALEXGAOYH13800138000河南省SKU0000077

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

[
	{
		订单编号=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
  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值