如何对两个 Excel 表实现各种类型的 JOIN
某Excel中的sheet分为3类,其中sheet A是基础表,部分数据如下:
A | B | C | |
1 | interval1 | interval2 | interval3 |
2 | 1 hour | 1 day | 1 week |
3 | 2 hours | 2 days | 2 weeks |
4 | 3 hours | 3 days | 3 weeks |
5 | 4 hours | 4 days | 4 weeks |
Sheet B1\B2…Bn是关联表,它们的格式都一样,且与A有相同的列interval1、interval2、interval3。其中一个B的部分数据如下:
A | B | C | D | E | F | G | |
1 | interval1 | interval2 | interval3 | Type | value1 | value2 | value3 |
2 | 2 hours | 1 day | 7 week | circle | 37 | 108.1 | 4.1 |
3 | 3 hours | 3 days | 7 weeks | Line | 39 | 117.5 | 4.2 |
4 | 4 hours | 4 days | 7 weeks | Line | 35 | 127 | 4.3 |
Sheet C用来描述A与B1\B2..Bn的Join类型,共3种,其中cross Join表示笛卡尔积;leftJoinBig表示左关联,关联列是interval1;leftJoinSmall也是左关联,关联列是interval1、interval2。部分数据如下:
A | B | |
1 | table | joinType |
2 | B1 | crossJoin |
3 | B2 | leftJoinBig |
4 | B3 | leftJoinSmall |
计算目标:按照sheet C中的join类型将sheet A和B1\B2..Bn关联起来,从A中取interva1列,从B取其他列,最后形成n个Excel文件。
以上面的sheet B为例(实际上每个B应当不同),如果joinType==crossJoin,则关联结果应该是:
A | B | C | D | E | F | G | |
1 | interval1 | interval2 | interval3 | Type | value1 | value2 | value3 |
2 | 1 hour | 1 day | 7 week | Circle | 37 | 108.1 | 4.1 |
3 | 1 hour | 3 days | 7 weeks | Line | 39 | 117.5 | 4.2 |
4 | 1 hour | 4 days | 7 weeks | Line | 35 | 127 | 4.3 |
5 | 2 hours | 1 day | 7 week | circle | 37 | 108.1 | 4.1 |
6 | 2 hours | 3 days | 7 weeks | Line | 39 | 117.5 | 4.2 |
7 | 2 hours | 4 days | 7 weeks | Line | 35 | 127 | 4.3 |
8 | 3 hours | 1 day | 7 week | circle | 37 | 108.1 | 4.1 |
9 | 3 hours | 3 days | 7 weeks | Line | 39 | 117.5 | 4.2 |
10 | 3 hours | 4 days | 7 weeks | Line | 35 | 127 | 4.3 |
11 | 4 hours | 1 day | 7 week | circle | 37 | 108.1 | 4.1 |
12 | 4 hours | 3 days | 7 weeks | Line | 39 | 117.5 | 4.2 |
13 | 4 hours | 4 days | 7 weeks | Line | 35 | 127 | 4.3 |
如果joinType==leftJoinBig,则关联结果应该是:
A | B | C | D | E | F | G | |
1 | interval1 | interval2 | interval3 | Type | value1 | value2 | value3 |
2 | 1 hour | ||||||
3 | 2 hours | 1 day | 7 week | circle | 37 | 108.1 | 4.1 |
4 | 3 hours | 3 days | 7 weeks | line | 39 | 117.5 | 4.2 |
5 | 4 hours | 4 days | 7 weeks | line | 35 | 127 | 4.3 |
如果joinType==leftJoinSmall,则关联结果应该是:
A | B | C | D | E | F | G | |
1 | interval1 | interval2 | interval3 | type | value1 | value2 | value3 |
2 | 1 hour | ||||||
3 | 2 hours | ||||||
4 | 3 hours | 3 days | 7 weeks | line | 39 | 117.5 | 4.2 |
5 | 4 hours | 4 days | 7 weeks | line | 35 | 127 | 4.3 |
这个计算需要循环遍历sheet C,因此只能用脚本而不是公式来实现。Join属于结构化计算,VBA缺乏直接可用的函数,代码会非常繁琐。
实现步骤:
1. 运行集算器(可以到润乾官网下载,用职场版,首次运行时会提示加载授权,下载个免费的就够了)
2. 编写脚本并执行
A | B | |
1 | =file("data.xlsx").xlsopen() | |
2 | =A1.xlsimport@t(;"C") | |
3 | =tableA=A1.xlsimport@t(;"A") | |
4 | for A2 | =tableB=A1.xlsimport@t(;A4.table) |
5 |
=case(A4.joinType, "crossJoin",xjoin(tableA:A;tableB:B), "leftJoinBig",xjoin@1 (tableA:A;tableB:B,A.interval1==interval1), "leftJoinSmall",xjoin@1(tableA:A;tableB:B,A.interval1==interval1 && A.interval2==interval2)) |
|
6 | =B5.new(A.interval1,B.interval2,B.interval3,B.type,B.value1,B.value2,B.value3) | |
7 | =file(A4.table+A4.joinType+".xlsx").xlsexport@t(B6) |
脚本函数 case 可对 Join 类型做分支判断,xjoin 算出笛卡尔积,@1 表示左关联。
如何对两个 Excel 表实现各种类型的 JOIN相关推荐
- dropdownlist三级联动怎么实现_一张表实现三级联动
今天是七夕,七夕快乐,大家今天有没有人约呢? 相信大部分的Access玩家都是玩Excel的高手,很多的功能在Excel中实现对大家来说都是小菜,比如今天要讲的联动. 那么,我们现在就来讲一下在Acc ...
- 子窗体中组合框联动_一张表实现组合框联动
嗨,大家中午好! 最近,有网友给我私信,想要一个联动的示例,一个有关于部门联动的操作. 其实关于联动的操作有很多,可以是组合框的联动,列表框联动,组合框与列表框也可以联动,哪怕是放到子窗体中也是可以联 ...
- 分别用邻接矩阵和邻接表实现图的深度优先遍历和广度优先遍历_数据结构与算法学习笔记:图...
图: 图结构区别于线性结构和树型结构,区别可见下图 逻辑上的图(graph)结构由顶点(vertex)和边(edge)组成. 一个图结构G包含顶点集合V和边集合E,任何两个顶点之间可以有一个边表示两者 ...
- 电力系统利用远程智能电能表实现远程集抄
引言 电力系统利用智能电能表实现远程集抄,其原则是借助远程智能抄表工具,对用户数据收集和分析,再利用数据通信传输功能,将在用户收集的数据传输至管理平台.采集到用户数据是实现智能用电的基础信息,发展电能 ...
- 用顺序表实现学生信息管理系统
用顺序表实现学生信息管理系统 问题描述: 定义一个包含学生信息(学号,姓名,成绩)的顺序表,使其具有如下功能: (1) 根据指定学生个数,逐个输入学生信息: (2) 逐个显示学生表中所有学生的相关信息 ...
- Java form表单原理,动态表单及动态建表实现原理[Java编程]
赞助商链接 本文"动态表单及动态建表实现原理[Java编程]"是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下 ...
- 邻接表实现的有向带权图 及 图算法(C++)
邻接表实现的有向带权图 相关概念 声明和定义 实现 1. 构造函数 2. 析构函数 3. 深度优先遍历 4. 广度优先遍历 5. 获取顶点在邻接表中对应的下标 6. 添加顶点 7. 移除顶点 8. 添 ...
- 约瑟夫环c语言代码顺序存储,顺序表实现约瑟夫环地问题,C语言.doc
顺序表实现约瑟夫环地问题,C语言 计算机科学与工程学院 PAGE PAGE 2 <算法与数据结构>试验报告 计算机科学与工程学院 <算法与数据结构>试验报告[一] 专业班级 1 ...
- Java单表实现评论回复功能
Java单表实现评论回复功能 1.简介 2.功能实现图 3.数据库设计 4.实体类 5.实现思路 6.功能实现 6.1 Sql入手 6.2 业务实现 7.前端实现 8.最终成果 1.简介 最近在写毕业 ...
最新文章
- 赠书 | 图像分类问题建模方案探索实践
- 佳能ts3100打印机使用说明书_佳能TS9120打印机完全满足家庭使用—最具性价比打印机...
- 8 Great Java 8 Features No One's Talking about--转载
- Apache ActiveMQ 5.9发布
- iOS录音后播放声音变小的解决方法
- php输入安全验证漏洞,PHP 输入验证错误漏洞
- Theano 中文文档 0.9 - 7. 教程
- UVA 10391 - Compound Words
- 相似度计算之马氏距离
- linux 权限 代码,linux 管理权限(示例代码)
- ACDSee QuickView(图片浏览器)v1.2.42官方版
- python图片表格转excel表格_python提取图片内容并转换成对应表格的markdown代码
- 用HTML和CSS制作一个带图片的旋转立方体
- 微信公众号(获取token 按钮生成 推送消息,微信授权)
- html控制标签,html中文本控制类标签基础知识
- java正则表达标点符号_用正则表达式去除标点符号
- 喜欢的现代诗 -。-
- C语言渔夫打鱼晒网问题
- dparsf是什么_老师,我用DPARSF做Slice Timeing时老报错,请问您是什么原因呢?
- 创建进程-CreateProcess (一)
热门文章
- 从Altium Designer转换原理图和PCB到Cadence Capture CIS及allegro
- 【48】DMA:为什么Kafka这么快?
- 《程序员那么可爱》今晚开播,邢昭林祝绪丹开启蜜恋
- Java,第一次作业——复利值
- 苹果手机还原网络设置会怎样_苹果手机信号差?不要慌,只要这样设置一下,从此跟信号差说拜拜...
- 抖音如何免费上热门精选 视频md5修改器ios
- 2018年,你一定要选对这些原型工具
- Element ui 中将switch开关自定义文字描述(ON/OFF)显示在开关里面
- 将 FML 用于 WebLogic Tuxedo Connector 转自bea.com
- 怎样将图片的背景色换成透明的?怎么让白底图片变透明?