集算器可以方便地读写Excel文件,下面用一个例子进行说明:

    描述:从data.xlsx读取订单数据和销售员列表,根据这两个sheet计算各部门的销售额,计算结果写入result.xlsx

    源Excel文件data.xlsx有两个sheet,其中订单数据如下:

wKiom1QICyCANeMUAAEzyowDvcQ235.jpg

  销售员列表如下:

wKioL1QICybCs5MOAAFspw12rTE178.jpg

    集算器代码:

wKiom1QICyLD5aHmAACUqANL6jI937.jpg

A1-A2:从excel文件data.xlsx分别读取第1和第2sheet,以序表的形式存储在A1A2格,即订单数据和销售员列表。

A3-A4:先将订单数据和销售员列表按照员工编号进行左关联,再通过分组汇总求各部门的销售额。算法不是本例的重点,这里不做过多描述。

A5:将计算结果存储于result.xlsx

    计算结果(result.xlsx)

wKioL1QICybBABwBAADH54SJwYY800.jpg

    代码解读:

  • 列名

importxls使用了函数选项@t,这表示将sheet的第一行当做集算器序表的列名,比如点击A1单元格,可以看到其变量值:

wKiom1QICyOwj7JJAADkJWA-ROs209.jpg

如此一来,后面的运算就可以直接使用列名来访问A1中的数据。

  • Sheet

上述代码是按照sheet序号来读取数据的,但有时用户更愿意用sheet名。集算器支持这种用法,比如订单数据的sheet名是“sales”,只需把A1中的sheet序号直接换成sheet名就可以实现按名读取,如下:

file("E:/data.xlsx").importxls@t(;”sales”)

写入文件时一样。如果想把A4的计算结果导出到名为summarysheet,可以这样写:

file("E:/result.xlsx").exportxls@t(A4;”summary”)

  • 数据范围

上述代码默认从sheet的第一行读取数据,直至结尾。但事实上我们常会遇到读取部分数据的情况,比如:

wKioL1QICyjSaztSAAFa-EstO-4652.jpg

Importxls函数可以指定要读取的行数范围。比如从第4行开始读,可以写作:

file("E:/data.xlsx").importxls@t(;1,4)

从第4行读到第1000行,可以写作:

file("E:/data.xlsx").importxls@t(;1,4:1000)

读取的列数也可以限制,比如只读取OrderIDSellerIdAmount这三列,可以写作:

file("E:/data.xlsx").importxls@t(OrderID,SellerId,Amount;1)

也可以按照列号来读取:

file("E:/data.xlsx").importxls@t(#1,#3,#4;1)

    延伸:

集算器有for循环语句,可以批量读写Excel文件。

集算器支持参数和宏,可以让基于Excel数据源的计算更加灵活。

集算器支持多数据源计算,可以实现数据库、文本文件、Excel之间的混合计算和数据迁移。