Excel多级结构转成树结构形式

第一步:Excel文件的形式如下

第二步:转换成树结构可选形式

第三步:具体怎么实现?

(1)、需要借助数据库中表来存储这些字段,一张表(aa)存Excel文件中的所有数据,一张作为处理表(bb)作为中转,把处理好的数据再放到存储表(aa)中。

(2)、具体操作

a、如果没有建表语句,那就从库中熟悉的表中来复制表结构;

sql 复制代码
--4*2=8列表,字段长度足够就可以(这里是100),c表示code即id,n表示name即名称
create table aa as select casedjrxm c1,casedjrxm n1,casedjrxm c2,casedjrxm n2,casedjrxm c3,casedjrxm n3,casedjrxm c4,casedjrxm n4 from ywcl_case where 1=2;
--2列临时表
create table bb as select casedjrxm c,casedjrxm n from ywcl_case where 1=2;

b、直接使用建表语句

sql 复制代码
CREATE TABLE "aa"
(
"c1" VARCHAR2(50),
"c2" VARCHAR2(50),
"c3" VARCHAR2(50),
"c4" VARCHAR2(50),
"c5" VARCHAR2(50),
"c6" VARCHAR2(50),
"n1" VARCHAR2(50),
"n2" VARCHAR2(50),
"n3" VARCHAR2(50),
"n4" VARCHAR2(50),
"n5" VARCHAR2(50),
"n6" VARCHAR2(50)) STORAGE(ON "MAIN", CLUSTERBTR) ;
COMMENT ON TABLE "aa" IS 'aa';

CREATE TABLE "BB"
(
"id" VARCHAR2(50),
"c" VARCHAR2(50),
"n" VARCHAR2(50)) STORAGE(ON "MAIN", CLUSTERBTR) ;
COMMENT ON TABLE "BB" IS 'BB';

c、把Excel文件中的数据要插入到已经建好的表(aa)中

javascript 复制代码
="insert into aa(n1,n2,n3,n4) values('"&A2&"','"&B2&"','"&C2&"','"&D2&"');"

以这种方式把Excel文件的数据全部获取到,然后在数据库中执行;

select * from aa;可以查询到已成功插入的全部数据。

d、对aa表中的数据进行处理,目前给到的数据只有文字,而没有编码的,所以需要给每一级都创建一个id。处理数据sql命令如下

一、处理第一级的父节点

sql 复制代码
truncate table bb;
--一级插入临时表
insert into bb(n) select distinct n1 from aa;
--以行数补齐3位做id
update bb set c=LPAD(rownum, 3, '0');
--回填
update aa set c1=(select c from bb where n=n1);

commit;

二、处理第二、三、四级节点,有两种方式

sql 复制代码
-----------方式1:不区分下级节点顺序-------
/*
delete from bb;
--二级插入临时表
insert into bb(n) select distinct n1||n2 from aa where n2 is not null;
--以行数补齐3位做id
update bb set c=LPAD(rownum, 3, '0');
--回填
update aa set c2=(select c from bb where n=n1||n2);
commit;

delete from bb;
--三级级插入临时表
insert into bb(n) select distinct n1||n2||n3 from aa where n3 is not null;
--以行数补齐3位做id
update bb set c=LPAD(rownum, 3, '0');
--回填
update aa set c3=(select c from bb where n=n1||n2||n3);
commit;

delete from bb;
--四级级插入临时表
insert into bb(n) select distinct n1||n2||n3||n4 from aa where n4 is not null;
--以行数补齐3位做id
update bb set c=LPAD(rownum, 3, '0');
--回填
update aa set c4=(select c from bb where n=n1||n2||n3||n4);
commit;
*/
-----------方式1:不区分下级节点顺序-------
sql 复制代码
-----------方式2:区分下级节点顺序:即每个下级都是从001开始-------
begin
for t
    in(select distinct n1 from aa where n2 is not null)
    loop
      delete from bb;
      --二级插入临时表
      insert into bb(n) select distinct n2 from aa where n1=t.n1;
      --以行数补齐3位做id
      update bb set c=LPAD(rownum, 3, '0');
      --回填
      update aa set c2=(select c from bb where n=n2) where n1=t.n1;
      commit;
    end loop;
end;

begin
for t
    in(select distinct n1||n2 n1 from aa where n3 is not null)
    loop
      delete from bb;
      --三级插入临时表
      insert into bb(n) select distinct n3 from aa where n1||n2=t.n1;
      --以行数补齐3位做id
      update bb set c=LPAD(rownum, 3, '0');
      --回填
      update aa set c3=(select c from bb where n=n3) where n1||n2=t.n1;
      commit;
    end loop;
end;

begin
for t
    in(select distinct n1||n2||n3 n1 from aa where n4 is not null)
    loop
      delete from bb;
      --四级插入临时表
      insert into bb(n) select distinct n4 from aa where n1||n2||n3=t.n1;
      --以行数补齐3位做id
      update bb set c=LPAD(rownum, 3, '0');
      --回填
      update aa set c4=(select c from bb where n=n4) where n1||n2||n3=t.n1;
      commit;
    end loop;
end;
-----------方式2:区分下级节点顺序:即每个下级都是从001开始-------

三、不管是使用哪种方式处理的数据最后得到的数据都有自己的id。

e、Excel所有数据已全部入库,那就需要处理成树结构的形式,树结构的形式js代码如下

javascript 复制代码
 {id:'001',pId:'-1',name:'新一代信息技术产业',allname:'新一代信息技术产业',"chkDisabled":true},
    {id:'001001',pId:'001',name:'下一代信息网络产业',allname:'新一代信息技术产业->下一代信息网络产业',"chkDisabled":true},
    {id:'001002',pId:'001',name:'电子核心产业',allname:'新一代信息技术产业->电子核心产业',"chkDisabled":true},
    {id:'001003',pId:'001',name:'人工智能',allname:'新一代信息技术产业->人工智能',"chkDisabled":true},
    {id:'001001001',pId:'001001',name:'网络设备制造',allname:'新一代信息技术产业->下一代信息网络产业->网络设备制造',"chkDisabled":false},
    {id:'001001002',pId:'001001',name:'新型计算机及信息终端设备制造',allname:'新一代信息技术产业->下一代信息网络产业->新型计算机及信息终端设备制造',"chkDisabled":false},
    {id:'001001003',pId:'001001',name:'信息安全设备制造',allname:'新一代信息技术产业->下一代信息网络产业->信息安全设备制造',"chkDisabled":false},

特别注意一下:"chkDisabled":flase表示的是最后一个节点 是可选的,如果是true,那说明有下一级节点,本节点不可选。

这种形式的格式怎么生成,看下面的sql

sql 复制代码
---- 数据库操作完成后 要生成代码中识别的形式
select '{'||a||','||b||','||c||','||d||','||e||'},' from (
select distinct 'id:'||''''||c1||'''' a,'pId:'||''''||-1||'''' b,'name:'||''''||n1||'''' c,'allname:'||''''||n1||'''' d,'"chkDisabled":'||'true' e from aa 
union all
select distinct 'id:'||''''||c1||c2||'''' a,'pId:'||''''||c1||'''' b,'name:'||''''||n2||'''' c,'allname:'||''''||n1||'->'||n2||'''' d,'"chkDisabled":'||'true' e from aa 
union all
select distinct 'id:'||''''||c1||c2||c3||'''' a,'pId:'||''''||c1||c2||'''' b,'name:'||''''||n3||'''' c,'allname:'||''''||n1||'->'||n2||'->'||n3||'''' d,'"chkDisabled":'||'false' e from aa where n4 =''
union all
select distinct 'id:'||''''||c1||c2||c3||'''' a,'pId:'||''''||c1||c2||'''' b,'name:'||''''||n3||'''' c,'allname:'||''''||n1||'->'||n2||'->'||n3||'''' d,'"chkDisabled":'||'true' e from aa where n4 <>''
union all
select 'id:'||''''||c1||c2||c3||c4||'''' a,'pId:'||''''||c1||c2||c3||'''' b,'name:'||''''||n4||'''' c,'allname:'||''''||n1||'->'||n2||'->'||n3||'->'||n4||'''' d,'"chkDisabled":'||'false' e from aa where n4 <>''
 order by b,a )

验证按照js中的形式来执行sql,sql中直接处理一对单引号括起来的值,在数据库中4个单引号才是一个单引号。

相关推荐
缺点内向2 小时前
如何在C#中添加Excel文档属性?
开发语言·数据库·c#·.net·excel
shouchaobao2 小时前
仓库房进销存Excel模板合集:商品采购+出入库+库存统计一站式管理,适配仓库管理员/中小企业/个体商户
excel
chenhdowue3 小时前
如何使用 vxe-table 导出为带图片的单元格到 excel 格式文件
vue.js·excel·vxe-table·vxe-ui
码上成长3 小时前
从零实现:react&Ts--批量导入 & Excel 模版下载功能
javascript·react.js·excel
前端sweetGirl3 小时前
Excel 里 XLOOKUP 函数返回日期时找不到值显示 1/0,怎么让他不显示
excel
来鸟 鸣间21 小时前
excel快速填充
excel
葡萄城技术团队1 天前
Excel 文件到底是怎么坏掉的?深入 OOXML 底层原理讲解修复策略
android·java·excel
程序边界1 天前
AI实战狂飙!Excel图表制作彻底解放双手:从数据清洗到智能预测全攻略
人工智能·excel
CodeCraft Studio1 天前
Excel处理控件Aspose.Cells教程:使用C#在Excel中创建漏斗图
ui·c#·excel·aspose·excel开发·excel漏斗图·漏斗图
wtsolutions1 天前
WPS另存为JSON,WPS导出JSON, WPS表格转换成JSON : Excel to JSON WPS插件使用指南
json·excel·wps·插件·加载项·wtsolutions