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

news/2024/10/11 9:07:40/

第一步: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 '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 '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/news/1537368.html

相关文章

浅谈Java之Mqtt协议

一、基本介绍 MQTT(Message Queuing Telemetry Transport&#xff0c;消息队列遥测传输协议)&#xff0c;是一种基于发布/订阅模式的"轻量级"通讯协议&#xff0c;它和 Modbus TCP 一样都是基于 TCP/IP 之上的应用层协议。 二、简单示例 在Java中使用MQTT协议进行消…

C++学习,容器类 <list>

C 标准库 <list> 是一个非常重要的容器类&#xff0c;用于存储元素集合&#xff0c;支持双向迭代器。<list>允许在容器的任意位置快速插入和删除元素。与数组或向量&#xff08;<vector>&#xff09;不同&#xff0c;<list> 不需要在创建时指定大小&am…

uniapp 编程体验

全局变量 方法一 改App.vue // App.vue export default {globalData: {userInfo: null,token: },onLaunch: function () {// 初始化全局变量this.globalData.userInfo { name: 张三, age: 30 };} }// 在其他页面或组件中访问 const app getApp(); console.log(app.globalDa…

基于floor函数报错注入sqli-labs less-5和less-6

sqli-labs第五六关基于floor报错注入 测试基于虚拟机搭建的靶场&#xff0c;在主机浏览器进行测试 首先能到第五关的对于基础的字符数字型判断&#xff0c;闭合方式&#xff0c;列数判断有一定了解&#xff0c;所以不再进行演示&#xff0c;直接进行数据爆破 关于floor函数报错…

如何打破双亲委派机制

双亲委派底层运行过程 双亲委派模型对于保证Java程序的稳定运作很重要&#xff0c;但它的实现却非常简单&#xff0c;实现双亲委派的代码都集中在 java.lang.ClassLoader的loadClass()方法之中&#xff0c;代码简单&#xff0c;逻辑清晰易懂:先检查类是否已经被加载过&#xf…

C++之LIST模拟实现(代码纯享版)

目录 文章目录 前言 一、代码 总结 前言 本文主要展示了模拟List的代码实现 一、代码 #pragma once #include<iostream> #include<assert.h> using namespace std; namespace zlh {template<class T>struct list_node{T _data;list_node<T>* _next;l…

Chromium 中chrome.downloads扩展接口c++

一、前端chrome.downloads 使用 chrome.downloads API 以编程方式启动、监控、操作和搜索下载内容。 权限 downloads 您必须在扩展程序清单中声明 "downloads" 权限&#xff0c;才能使用此 API。 {"name": "My extension",..."permiss…

目录工具类 - C#小函数类推荐

此文记录的是目录工具类。 /***目录工具类Austin Liu 刘恒辉Project Manager and Software DesignerE-Mail: lzhdim163.comBlog: http://lzhdim.cnblogs.comDate: 2024-01-15 15:18:00***/namespace Lzhdim.LPF.Utility {using System.IO;/// <summary>/// The Objec…