集算器可以方便地读写Excel文件,下面用一个例子进行说明:
描述:从data.xlsx读取订单数据和销售员列表,根据这两个sheet计算各部门的销售额,计算结果写入result.xlsx。
源Excel文件:data.xlsx有两个sheet,其中订单数据如下:
销售员列表如下:
集算器代码:
A1-A2:从excel文件data.xlsx分别读取第1和第2个sheet,以序表的形式存储在A1、A2格,即订单数据和销售员列表。
A3-A4:先将订单数据和销售员列表按照员工编号进行左关联,再通过分组汇总求各部门的销售额。算法不是本例的重点,这里不做过多描述。
A5:将计算结果存储于result.xlsx。
计算结果(result.xlsx)
代码解读:
列名
importxls使用了函数选项@t,这表示将sheet的第一行当做集算器序表的列名,比如点击A1单元格,可以看到其变量值:
如此一来,后面的运算就可以直接使用列名来访问A1中的数据。
Sheet名
上述代码是按照sheet序号来读取数据的,但有时用户更愿意用sheet名。集算器支持这种用法,比如订单数据的sheet名是“sales”,只需把A1中的sheet序号直接换成sheet名就可以实现按名读取,如下:
file("E:/data.xlsx").importxls@t(;”sales”)
写入文件时一样。如果想把A4的计算结果导出到名为summary的sheet,可以这样写:
file("E:/result.xlsx").exportxls@t(A4;”summary”)
数据范围
上述代码默认从sheet的第一行读取数据,直至结尾。但事实上我们常会遇到读取部分数据的情况,比如:
Importxls函数可以指定要读取的行数范围。比如从第4行开始读,可以写作:
file("E:/data.xlsx").importxls@t(;1,4)
从第4行读到第1000行,可以写作:
file("E:/data.xlsx").importxls@t(;1,4:1000)
读取的列数也可以限制,比如只读取OrderID、SellerId、Amount这三列,可以写作:
file("E:/data.xlsx").importxls@t(OrderID,SellerId,Amount;1)
也可以按照列号来读取:
file("E:/data.xlsx").importxls@t(#1,#3,#4;1)
延伸:
集算器有for循环语句,可以批量读写Excel文件。
集算器支持参数和宏,可以让基于Excel数据源的计算更加灵活。
集算器支持多数据源计算,可以实现数据库、文本文件、Excel之间的混合计算和数据迁移。