随着互联网的快速发展,大数据时代的到来,数据资源的处理成了各行各业都面临的热点问题。除了通过特别专业、特别特别昂贵、特别特别特别复杂的分析平台来处理特别x4海量的数据外,我们还常常会遇到Excel(xls,xlsx)文件这样手边能够即时获得的数据文件。使用Excel记录、处理和交换数据,是因为这个软件的简单方便,而如果又需要通过一堆外部调用来进行后续的分析处理,那就会显得十分笨拙。现在我们就来分享一下如果通过轻量级地使用集算器来分析处理Excel形式的数据来源。
成都创新互联成立以来不断整合自身及行业资源、不断突破观念以使企业策略得到完善和成熟,建立了一套“以技术为基点,以客户需求中心、市场为导向”的快速反应体系。对公司的主营项目,如中高端企业网站企划 / 设计、行业 / 企业门户设计推广、行业门户平台运营、重庆APP开发公司、手机网站制作设计、微信网站制作、软件开发、成都服务器托管等实行标准化操作,让客户可以直观的预知到从成都创新互联可以获得的服务效果。最近,中美贸易战愈演愈烈,我们也来蹭一下热度,用一些公开获得的中美两国的经济指标做个简单对比,模拟一下实战的场景,找一下掌上观文,了如指掌,一切尽在掌握的感觉……
下面是我们用到的基础数据文件Indicators.xlsx,其中,每个工作表是一个国家的各项指标:
接下来,我们打开集算器了,写下第一行脚本:
=file(“Indicators.xlsx”) | =A1.xlsopen() |
然后我们把脚本文件保存到和Indicators.xlsx数据文件一个目录下,以方便引用相对路径,名称就叫indicators.dfx。
说明一下,”=”开头的格子称为“计算格”,其中的表达式的计算结果会自动赋予单元格,后面的脚本中就可以用单元格名称(A1、C25等等)来直接使用了。同时,这里用到了两个函数。第一个是file()函数,返回一个文件对象。参数”Indicators.xlsx”是文件名,因为这里写的是相对路径,所以会在indicators.dfx文件的同级目录查找。第二个是xlsopen()函数,把文件对象A1当做一个Excel工作簿对象打开。
集算器的好处是可以随时进行测试,我们就来看一下现在的状态,点击“执行”图标后,结果如下:
在右侧面板,可以看到Excel文件被显示为一个表格,除去最左侧的序号列,第一列是工作表名称,第二列和第三列分别是工作表的行列数。这三个字段构成了一个数据结构。若干条具有这个数据结构的记录组成了一个有序的集合,我们称之为“序表”。如果有序集合中不是具有相同数据结构的记录,而只是一般的一些数据成员,那么我们就称之为“序列”,所以说,序表是一种特殊的序列。集算器对于序列和序表提供了大量的函数,能够支持各种复杂运算,因此,这两种数据对象在集算器中会经常遇到。
接下来,我们就要读取工作表的内容了,先看脚本:
=B1.xlsimport@t() |
xlsimport()函数是从工作簿对象B1中导入一个工作表。这里用到了@t选项,这个选项会把首行内容作为标题而不是数据(这是Excel表格常见的样子)。选项需要写在函数名后,以@开头,多个选项只需要写一个@,例如@tx。这里我们没有使用参数,所以函数会默认导入第一个工作表的全部内容。再点下“执行”看看结果,如下:
可以看到第一个工作表的内容导入成了一个序表。不过这里我们会遇到第一个问题,每个经济指标Indicator包括两行,第二行是指标更新的时间,是我们不关心的内容。集算器的序表要解决这类问题非常简单,加一个选出函数就可以了:
=B1.xlsimport@t().select(Indicator!=null) |
select()是选出函数,参数Indicator!=null是选出条件,也就是根据Indicator列是不是空来决定是不是选择这一行内容,还是执行看下效果:
筛选无效(不感兴趣)数据的的问题已经解决,继续研究发现每个指标中的Last是我们需要关心的,因此我们希望只导入Indicator和Last字段。脚本调整如下:
=B1.xlsimport@t(Indicator,Last).select(Indicator!=null) |
这里用到了xlsimport()函数的选出字段参数,”Indicator,Last”就是希望选出的字段名(逗号分隔)。接下来专门导入中国的数据:
=B1.xlsimport@t(Indicator,Last;”China”).select(Indicator!=null) |
这里参数又增加了一个”China”,指定了要导入的工作表名称,与前面的字段参数用”;”隔开。(还可以指定导入的开始行和结束行,因为例子中没有用到就不介绍了,有兴趣的话可以参考教程文档试验一下。)执行后就可以看到中国的指标了:
现在开始进行简单的比较,把两个表根据Indicator连接起来:
=A2.join(Indicator,B2:Indicator,Last:’China’) |
这里使用到了join()函数,用单元格A2的字段Indicator匹配单元格B2的键Indicator,找到相应记录后拼上B2的Last字段,并使用字段名’China’拼到A2序表中,如下图:
然后把美国的Last更名为US:
=A2.join(Indicator,B2:Indicator,Last:’China’).rename(Last:’United States’) |
这里的rename()函数用来修改序表的字段名,每个字段修改用”:”映射,Last是曾用名,’United States’为新字段名:
前面提到过,集算器对于序列和序表提供了很多函数进行计算,用起来十分方便。这里我们就利用sort函数,把中美指标按照差距大小进行排序:
=A3.sort@z(abs(‘United States’-‘China’)) |
这里用到了sort()函数进行排序,@z选项用来使结果降序排列。参数是用做排序依据的表达式,这里用美中指标进行了简单的差值,然后用abs()函数计算绝对值。结果如下:
至此,需要的数据已经整理好了。为了以后可以重复使用,我们把这个比较结果添加到工作簿的一个新工作表’US vs China’中,并写回到源文件中:
>B1.xlsexport@t(A4;”US vs China”) | >A1.xlswrite(B1) |
前面提到过“=”开头的是计算格,这里又遇到了一种”>”开头的格子,我们称之为“执行格“。执行格执行后不会自动为单元格赋值。
这里用到的xlsexport()函数用来把序表A4写到工作簿对象B1中,”:”隔开的第二个参数是工作表名称。这里同样用到了选项,这里的@t表示需要导出标题行到工作表中。而xlswrite()函数则把工作簿对象B1写出到文件对象A1。
最后,我们打开excel文件查看一下最终结果:
简单的几行脚本,Excel文件多个工作表的导入、连接、排序、导出等功能就轻松实现了。这还只是揭开了集算器的一角,还有更多的功能等待着我们去探索和应用。
完整脚本参考如下:
A | B | |
1 | =file(“Indicators.xlsx”) | =A1.xlsopen() |
2 | =B1.xlsimport@t(Indicator,Last).select(Indicator!=null) | =B1.xlsimport@t(Indicator,Last;”China”).select(Indicator!=null) |
3 | =A2.join(Indicator,B2:Indicator,Last:’China’).rename(Last:’United States’) | |
4 | =A3.sort@z(abs(‘United States’-‘China’)) | |
5 | >B1.xlsexport@t(A4;”US vs China”) | >A1.xlswrite(B1) |
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。