找回密码
 立即注册

QQ登录

只需一步,快速开始

Fiooona
论坛元老   /  发表于:2020-9-29 16:34  /   查看:4009  /  回复:0
    微软Excel中增加了一个强大的功能,叫做动态数组,很高兴的告诉大家 SpreadJS现在也支持了这一特性。从前我们用一个公式,返回一个结果。这个新的动态数组功能支持从一个公式返回多个计算结果。这些结果可以溢出到相邻的单元格,被叫做溢出数组公式。
     这篇文章中我会给给大家展示如何用SpreadJS 的设计器个API 实现一个不一样的动态数组功能,会包括一些筛选、过滤、去重、溢出数组、溢出运算符操作。
创建一个电子表格
      首先创建一个SSJSON文件,其中包含项目的表和数据,我们会以这个文件为基础来完成项目的其余部分。在设计器中完成动态数组的设置,在HTML中加载加载这个未完成的JSON:
  1. <font size="4"><script type="text/javascript" src="dynamicArrays.js"></script>

  2. <script>
  3.     window.onload = function() {
  4.        // Initializing Spread         
  5.       var spread = new GC.Spread.Sheets.Workbook(document.getElementById('ss'), { sheetCount: 1 });         

  6.       // Load JSON template saved as JS         
  7.       spread.fromJSON(dynamicArrays);     
  8. };
  9. </script></font>
复制代码
image.png69578856.png

动态数组
    现在已经有一些数据加载了,我们用动态数组中以小部分功能去分析数据。使用动态数组第一步,需要先设置 allowDynamicArray 选项为 true
  1. <font size="4">spread.options.allowDynamicArray = true;</font>
复制代码
      动态数组一些计算方式会有所不同,所以需要设置这个选项。启动这个选项后,如果您还希望能返回多个计算结果的函数只返回单个值,你需要用SINGLE函数或者@操作符。
      我们先用筛选来试一试,在这个示例中,我们筛选所有订单中超过$10000的订单,选择一个单元格,给FILTER 函数提供3个参数:
  • 要筛选的区域
  • 单元格范围和要比较的项目
  • 指明如果返回值为空时需要返回的值
image.png29396361.png

在单元格中设置如下的公式:
  1. <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 按字母顺序表对销售代表进行排序
image.png263602904.png

我们甚至可以进一步使用SORTBY函数按美元金额对整个订单进行排序:
image.png424665221.png

设置这些公式的代码与FILTER函数一样简单:
  1. <font size="4">//Set SORT and UNIQUE functions sheet.setFormula(23, 6, 'FILTER(SalesData[[#Data], [Sales Rep]:[Amount ($)]],SalesData[[#Data], [Amount ($)]]>10000,"")');

  2. //Set SORTBY function sheet.setFormula(33, 2, 'SORTBY(SalesData[#Data],SalesData[[#Data], [Amount ($)]],-1)');</font>
复制代码
入门:溢出数组
到目前为止,您在本博客中看到的所有公式都将返回多个结果,并且这些结果已成功“溢出”到其他单元格中,称为“溢出数组”。溢出的数组表明,只要有空间,数组就会自动扩展以适合数据。在这种情况下,我们可以添加另一个顺序,溢出的数组会自动增加大小,以将该条目添加到列表中。
image.png789449767.png

在某些情况下,数组没有足够的空间溢出。这时,您将看到“ #SPILL!”提示。单元格也显示了数组试图溢出到的范围:
image.png694613036.png

溢出操作简介
引用计算结果时溢出数组确实会增加复杂性,如果你输入一个动态数组公式,结果在A3-A8单元格中,你想要在其他的公式中引用这个结果,但是如果用户增加或减少了数据怎么办?这个引用就无法再继续使用了,一个简单的解决办法就是使用“A1#”符号, “#”本质上指定了动态数组公式的溢出数组结果。在最后一个示例中,我们将使用“ A3#”来引用溢出的数组,而不是使用A3:A8。

在这个例子中我们想获得所有出售产品的总量。首先,我们找到所有不同的产品(使用UNIQUE):
image.png594942321.png


结果溢出到范围H34:H37中,因此我们可以使用溢出运算符将此范围称为“ H34#”。我们可以使用SUMIF公式来实现:

image.png18731383.png


我们可以移动一些数组,并添加边框和颜色以使结果更加清晰。在这里,我们对使用动态数组对数据进行了一些基本的产品分析:

image.png787425536.png
这就是在设计器和代码中将动态数组与SpreadJS一起使用的全部内容!


组件化表格编辑器(预览版)试用进行中,点击了解详情!
请点击评分,对我的服务做出评价!5分为非常满意!

0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部