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

embedded/2024/10/17 11:28:50/

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

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

第三步:具体怎么实现?

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

(2)、具体操作

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

--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、直接使用建表语句

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)中

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

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

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

d、对aa表中的数据进行处理,目前给到的数据只有文字,而没有编码的,所以需要给每一级都创建一个id。处理数据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;

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

-----------方式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:不区分下级节点顺序-------

-----------方式2:区分下级节点顺序:即每个下级都是从001开始-------
begin
for tin(select distinct n1 from aa where n2 is not null)loopdelete from bb;--二级插入临时表insert into bb(n) select distinct n2 from aa where n1=t.n1;--以行数补齐3位做idupdate 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 tin(select distinct n1||n2 n1 from aa where n3 is not null)loopdelete from bb;--三级插入临时表insert into bb(n) select distinct n3 from aa where n1||n2=t.n1;--以行数补齐3位做idupdate 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 tin(select distinct n1||n2||n3 n1 from aa where n4 is not null)loopdelete from bb;--四级插入临时表insert into bb(n) select distinct n4 from aa where n1||n2||n3=t.n1;--以行数补齐3位做idupdate 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代码如下

 {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

---- 数据库操作完成后 要生成代码中识别的形式
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个单引号才是一个单引号。


http://www.ppmy.cn/embedded/128153.html

相关文章

如何通过计算巢在阿里云一键部署FlowiseAI

什么是FlowiseAI FlowiseAI 是一个开源的低代码开发工具&#xff0c;专为开发者构建定制的语言学习模型&#xff08;LLM&#xff09;应用而设计。 通过其拖放式界面&#xff0c;用户可以轻松创建和管理AI驱动的交互式应用&#xff0c;如聊天机器人和数据分析工具。 它基于Lang…

【分布式微服务云原生】《虚拟服务器之暗面:性能损耗、噪音邻居与安全隐私挑战全解析》

标题&#xff1a;《虚拟服务器之暗面&#xff1a;性能、邻居与隐私挑战全解析》 摘要&#xff1a;本文深入探讨虚拟服务器在带来诸多便利的同时&#xff0c;所面临的性能损耗、噪音邻居以及安全隐私问题。读者将全面了解这些问题的具体表现、产生原因以及应对措施&#xff0c;…

【ShuQiHere】智能交通的未来:AI与5G技术的完美结合

【ShuQiHere】 &#x1f697;&#x1f4e1; 目录 引言智能交通系统&#xff08;ITS&#xff09;概述从1G到5G&#xff1a;通信技术的演变V2X技术&#xff1a;车辆与一切的通信5G与AI在智能交通中的应用智能交通的未来场景总结 引言 交通作为社会的核心基础设施&#xff0c;一…

2024年10款超好用的图纸加密软件排行榜|CAD图纸加密指南

随着CAD图纸在工程、建筑、机械设计等领域的广泛应用&#xff0c;图纸的安全性越来越受到重视。CAD图纸作为企业核心设计文件&#xff0c;如果没有得到有效的保护&#xff0c;可能会导致知识产权泄露、竞争优势丧失&#xff0c;甚至给企业带来巨大的经济损失。因此&#xff0c;…

HTTP服务

一.http协议的介绍 http应用层协议 超文本传输协议&#xff08;比如网站上面的超链接&#xff09; 作用&#xff1a;构建网站服务器&#xff0c;可以在客户端与网站服务器之间传输文本数据。 浏览器会将文本数据解析成对应的图片&#xff0c;视频进行展示。 1.网站类型 静…

V853 tina sdk添加板级支持包

文章目录 1、环境介绍2、V853 Tina SDK说明3、添加openwrt板级支持包4、编译 1、环境介绍 硬件&#xff1a;韦东山v853 DShanPI-AICT开发板 软件&#xff1a;V853 Tina SDK 2、V853 Tina SDK说明 需要明确的是&#xff0c;我所拿到的这版sdk是不支持buildroot的&#xff0c…

【ROS2实操五】通信机制补充

简介 本章主要介绍关于通信机制的补充内容&#xff0c;比如&#xff1a;分布式框架搭建、重名问题处理、常用API、通信机制工具等等&#xff0c;这些补充内容的知识点比较零散但是每个知识点都不复杂。 学习内容学习收获1.分布式通信的概念、应用场景以及通信规则。能够独立搭…

C++学习路线(十三)

防御式编程 子程序应该不因传入错误数据而被破坏&#xff0c;哪怕是由其他子程序产生的错误数据。这种思想是将可能出现的错误造成的影响控制在有限的范围内 具体措施&#xff1a; 对输入进行体检 &#xff08;1&#xff09;检查输入源&#xff08;文件、网络、控制台&#x…