mud_sanc 板


LINE

写个近况。 最近一个需要谕知全公司的人知道的东西,是好几个 EXCEL 档,每个档里头各有一些栏位资料,大致上是 A<->B 间的 对照,而 A 有 A1, A2, ... 等栏位,B 有 B1, B2, .. 等 栏位。 这时,比方我想查的东西,刚好分散在好几个 EXCEL 档里头 ,查起来很麻烦,用 javascript 会简单很多: 1.这些档都另存 .csv 2.写一支 htm 档,开头就去读取这些 .csv 的东西,存成一 个叫做 tmps 的字串阵列,每个元素都是每个 csv 档的每一 行: var tmps=[]; var fso=new ActiveXObject("filesystemobject"); for(i=0;i<dirs.length;i++) { f=fso.OpenTextFile("D:\\"+i+".csv"); csv=f.ReadAll(); f.close(); tmps.push(csv.split("\n")); } 这样 tmps 就是我要的全域变数 通常 tmps 还可以 tmps.sort(); 一下 3.宣告两个全域变数 var data1={}; var data2={}; data1 用来储存 A 资料的各栏位,使用 mapping 的储存格 式,比方其资料结构如下 data1[A1][A2][A3]... 它的做法很单纯,就是去对每一个 tmps[i] 做必要的拆解: for(i=0;i<tmps.length;i++) { ab=tmps[i].split("A资料与B资料间的分隔字串"); // 这样 ab[0] = A资料, ab[1] = B资料 // 先处理 data1 a=ab[0].split("\t"); if(typeof(data1[a[0]])=="undefined") data1[a[0]]={}; if(typeof(data1[a[0]][a[1]])=="undefined") data1[a[0]][a[1]]={}; . . // 再处理 data2 b=ab[1].split("\t"); if(typeof(data2[b[0]])=="undefined") data2[b[0]]={}; if(typeof(data2[b[0]][b[1]])=="undefined") data2[b[0]][b[1]]={}; . . } 4.有了 tmps 及 data1、data2,就可以很简单的做下拉式 查询介面,既可由 A 查 B,也可由 B 查 A。例如使用者 想由 A 查 B,它下拉了 A1、A2、A3 三项,然後按下查 询按纽,该按纽 on_click='search_a_b();' function search_a_b() { s1=document.getElementById("s1").value; s2=document.getElementById("s2").value; s3=document.getElementById("s3").value; // 当然实际不会这样写,这里只是简单说明 // 产生比对用字串 ss=s1+"\t"+s2+"\t"+s3; // 然後去跟 tmps 里面的每一笔做比对 str=""; for(i=0;i<tmps.length;i++) { ab=tmps[i].split("A资料与B资料间的分隔字串"); // 因为是由 A 查 B 所以比对目标放在 ab[0]; if(ab[0].indexOf(ss)==-1) continue; // 比对到符合的 str+=tmps[i].replace(/\t/g,"&emsp;")+"<BR>"; } document.write(str); } 它会将所有符合该三项下拉选项的结果都列出来,比方 A 资料 其实有 A1~A5 五个可下拉项,使用者只下拉前三个时,它就把 只要符合前三项即可的都列出来。 例如说,以异特龙为例,牠所属的界、门、纲如下 界: 动物界 门: 脊索动物门 纲: 蜥形纲 牠所属的目、科、属如下 总目: 恐龙总目 目: 鸟臀目 科: 剑龙科 亚科: 剑龙亚科 属: 剑龙属 名字: 异特龙 那前面的界门纲就相当於 A 资料,目科属就相当於 B 资料。 那比方我要由 A 查 B,分别下拉动物界、脊索动物门、蜥形纲, 按下查询,那它就应该要显示的资料: 动物界 脊索动物门 蜥形纲 ←→ 恐龙总目 鸟臀目 剑龙科 剑龙亚科 剑龙属 异特龙 上面的 ss 变数就是 "动物界\t脊索动物门\t蜥形纲",它就会去 比对每一个 tmps[i] 里头的字串,有没有跟 ss match 的,有的 话,就把该行 document.write 出来。 则这时假设我只下拉前两个,它自然会把所有有符合前两个的都列 出,例如光脊索动物门就又有很多分支: https://i.imgur.com/Zv0coMN.jpg
我写好这个东西後,把 htm 档丢到公司内网再告知同单位的同事 有这个东西,则只要知道这东西的人,就不用再去 EXCEL 一个一 个点开来看,只要透过该 htm 的查询介面,即可轻松查询出想知 道的结果,而且可透过这样的综览,明确知道公司想告诉我们的事 它日後的更新也很方便,每一次的更新就是夹带一些 EXCEL 档, 将它们指定目录另存 .csv,大概一两分钟吧就通通另存完毕,然 後 htm 查询介面就能查到最新的结果。 进一步来说,还可以写树状显示,这个利用 mapping 及 <table> 标签的容许弹性来做即可,以资料A 的树状结构为例:" str="<table>"; a1=Object.keys(data1); for(i1=0;i1<a1.length;i1++) { str+="<tr><td>"+a1[i1]+"</td></tr>"; a2=Object.keys(data1[a1[i1]]); for(i2=0;i2<a2.length;i2++) { str+="<tr><td></td><td>"+a2[i2]+"</td></tr>"; a3=Object.keys(data1[a1[i1]][a2[i2]]); for(i3=0;i3<a3.length;i3++) { str+="<tr><td></td><td></td><td>"+a3[i3]+"</td></tr>"; . . } } } // 表格的好处就是每一行累加字串最後只要有 </tr> 就不会出错 str+="</table>"; document.write(str); 这样出来的资料就类似 xx1 xx11 xx111 xx112 . . xx12 xx121 xx122 xx1221 xx1222 . . xx123 . . . . xx2 xx21 xx211 . . 即全部的资料依树状的方式显示於同一个 htm 页面,这时手动 按 ctrl-f 去看资料位在哪也是可以,进阶写法就透过展开按钮 对 style="display:none/block" 做切换,即可实现树状结构的 展开及缩回。 熟悉 mapping 的话,这些不用花多少时间就能写出来。 我的感触就是,要给全公司看的东西,原始资料不应该如此分散 ,这次的经验可应用在很多地方。 我目前仅剩一件事情令我觉得心烦,这个月要面对,希望能顺利 ,渡过了就没事了,应该会继续把 confarea.htm 完工。这东西 的缺点是无法写成线上网页,但如果放到 github 的话则大家都 可以下载,我蛮希望以後有人真的能下载然後利用它写圣殿的区 域。 其它没啥事,晚上预计做个备份。 LAechan --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.33.66.104 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/mud_sanc/M.1636624791.A.B47.html ※ 编辑: laechan (114.33.66.104 台湾), 11/11/2021 18:03:05 ※ 编辑: laechan (114.33.66.104 台湾), 11/11/2021 18:14:17
1F:推 ttnkuo : 真好,我不会写程式,都马要用VLOOK.... 11/19 13:35
各有各的好处。 javascript 优点是不难学,语法较容易理解,常写也容易记住。 我最近新写的东西 https://sites.google.com/view/mystockmemo 我拿它当线上记事本使用。对我来说这实在很方便,即便是土法炼 钢刻程式码,只要方便就好其它我完全不在意。 ※ 编辑: laechan (114.33.66.104 台湾), 11/19/2021 23:35:02
2F:推 ttnkuo : 哇靠,这真是神了,去世界各地随时都能查到!! 11/24 11:20
它的好处就是 1.它实际上只是一个 .htm 档,所以能简单放在 google site 2.用记事本就能编辑,用任何浏览器都能开启 3.因为它实际上就一个档,所以放在手机里头也能开启,我不用 学写 APP 也能得到与 APP 一样的效果 4.当然它很阳春没办法很精致这受限於我的功力以及我用了多少 东西(比方 CSS、jQuery、React、...),但我喜欢它的方便性 5.它很大满足了我的资料搜集癖,因为我能享受到搜集後的成果 ,也就是变成了可用的资讯。 我之前还有写一个东西,就是当我去日本时可以用到的 https://sites.google.com/view/appmathtest 它成功让我"临时"找到我想吃的餐馆,以及我的旅伴希望我帮忙 找的餐馆,都是很临时起意或临时要求的,这就是我想要的方便 性。 ※ 编辑: laechan (114.33.66.104 台湾), 11/24/2021 20:18:58
3F:推 ttnkuo : 这样已经很猛了,不过这样以後资料多了後 11/27 20:00
4F:→ ttnkuo : 会不会忘记网址? 我看网址都不像是有编号的 11/27 20:00
所有的网页都会显示於自己的google site页面 https://sites.google.com 忘记网址的话就进入该页面,看想点开的网页是哪一个, 就点进去,然後选检视模式就知道网址,像我就忘了上面 的京阪餐馆资料网页的网址,忘了就进该页面去打开再用 检视即可。 我目前有release过的还有以下 disney+片单查询 https://sites.google.com/view/disneyplusearch 名侦探柯南时间线(到82集左右) https://sites.google.com/view/conantimeline 日本各地区即时影像(不过我很久没更新它了) https://sites.google.com/view/japanlivecams 圣殿随机地图产生器 https://sites.google.com/view/randomapv1 BGD台版团员资料(这个也很久没更新了) https://sites.google.com/view/bgdtwcardv1 BGD 2020 vote(又快要年终投票了) https://sites.google.com/view/bgd2020vote 我实际上记不了这麽多网址的。 ※ 编辑: laechan (114.33.66.104 台湾), 11/28/2021 08:03:41
5F:→ ttnkuo : 哇靠,真的太强太好用了! 学到新知了,感谢! 11/28 08:30







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Soft_Job站内搜寻

TOP