微软Excel中增加了一个强大的功能,叫做动态数组,很高兴的告诉大家 SpreadJS现在也支持了这一特性。从前我们用一个公式,返回一个结果。这个新的动态数组功能支持从一个公式返回多个计算结果。这些结果可以溢出到相邻的单元格,被叫做溢出数组公式。
这篇文章中我会给给大家展示如何用SpreadJS 的设计器个API 实现一个不一样的动态数组功能,会包括一些筛选、过滤、去重、溢出数组、溢出运算符操作。
创建一个电子表格
首先创建一个SSJSON文件,其中包含项目的表和数据,我们会以这个文件为基础来完成项目的其余部分。在设计器中完成动态数组的设置,在HTML中加载加载这个未完成的JSON:
- <font size="4"><script type="text/javascript" src="dynamicArrays.js"></script>
- <script>
- window.onload = function() {
- // Initializing Spread
- var spread = new GC.Spread.Sheets.Workbook(document.getElementById('ss'), { sheetCount: 1 });
- // Load JSON template saved as JS
- spread.fromJSON(dynamicArrays);
- };
- </script></font>
复制代码
动态数组
现在已经有一些数据加载了,我们用动态数组中以小部分功能去分析数据。使用动态数组第一步,需要先设置 allowDynamicArray 选项为 true
- <font size="4">spread.options.allowDynamicArray = true;</font>
复制代码 动态数组一些计算方式会有所不同,所以需要设置这个选项。启动这个选项后,如果您还希望能返回多个计算结果的函数只返回单个值,你需要用SINGLE函数或者@操作符。
我们先用筛选来试一试,在这个示例中,我们筛选所有订单中超过$10000的订单,选择一个单元格,给FILTER 函数提供3个参数:
- 要筛选的区域
- 单元格范围和要比较的项目
- 指明如果返回值为空时需要返回的值
在单元格中设置如下的公式:
- <font size="4">sheet.setFormula(23, 2, 'FILTER(SalesData[[#Data], [Sales Rep]:[Amount ($)]],SalesData[[#Data], [Amount ($)]]>10000,"")');</font>
复制代码 其他重要的动态数组功能包括SORT,SORTBY和UNIQUE。我们可以将UNIQUE和SORT函数合二为一:
1 在表格中找到所有的销售代表,去除重复项
2 按字母顺序表对销售代表进行排序
我们甚至可以进一步使用SORTBY函数按美元金额对整个订单进行排序:
设置这些公式的代码与FILTER函数一样简单:
- <font size="4">//Set SORT and UNIQUE functions sheet.setFormula(23, 6, 'FILTER(SalesData[[#Data], [Sales Rep]:[Amount ($)]],SalesData[[#Data], [Amount ($)]]>10000,"")');
- //Set SORTBY function sheet.setFormula(33, 2, 'SORTBY(SalesData[#Data],SalesData[[#Data], [Amount ($)]],-1)');</font>
复制代码 入门:溢出数组
到目前为止,您在本博客中看到的所有公式都将返回多个结果,并且这些结果已成功“溢出”到其他单元格中,称为“溢出数组”。溢出的数组表明,只要有空间,数组就会自动扩展以适合数据。在这种情况下,我们可以添加另一个顺序,溢出的数组会自动增加大小,以将该条目添加到列表中。
在某些情况下,数组没有足够的空间溢出。这时,您将看到“ #SPILL!”提示。单元格也显示了数组试图溢出到的范围:
溢出操作简介
引用计算结果时溢出数组确实会增加复杂性,如果你输入一个动态数组公式,结果在A3-A8单元格中,你想要在其他的公式中引用这个结果,但是如果用户增加或减少了数据怎么办?这个引用就无法再继续使用了,一个简单的解决办法就是使用“A1#”符号, “#”本质上指定了动态数组公式的溢出数组结果。在最后一个示例中,我们将使用“ A3#”来引用溢出的数组,而不是使用A3:A8。
在这个例子中我们想获得所有出售产品的总量。首先,我们找到所有不同的产品(使用UNIQUE):
结果溢出到范围H34:H37中,因此我们可以使用溢出运算符将此范围称为“ H34#”。我们可以使用SUMIF公式来实现:
我们可以移动一些数组,并添加边框和颜色以使结果更加清晰。在这里,我们对使用动态数组对数据进行了一些基本的产品分析:
这就是在设计器和代码中将动态数组与SpreadJS一起使用的全部内容!
|
|