V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
powertoolsteam
V2EX  ›  推广

SpreadJS:强大的数组公式(Array Function)

  •  
  •   powertoolsteam · 2019-03-13 10:54:05 +08:00 · 1201 次点击
    这是一个创建于 2086 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前言 | 问题背景

    数组公式是电子表格中功能最强大且未充分利用的计算功能之一,允许用户使用更简单的计算替换数千个公式,同时提供相同的结果。例如,它们可用于轻松创建销售表中的另一个自动计算列,或创建一些过滤数据。使用数组公式的一些好处包括:

    • 在复杂的计算中消除了对中间公式的需求
    • 没有数组公式,有些计算是不可能的,因为它们需要使用整个值数组而不是单个值
    • 可以给出单个结果或多个结果
    • 确保一致性和速度,因为公式中使用的数组将存储在内存中

    数组公式可以做得更多,但是本教程将重点介绍这些简单的示例,以便您开始使用 SpreadJS 中的数组公式。

    要下载本教程的示例 zip,请单击此处( http://www.grapecity.com.cn/downloads/demo/SpreadJS%E5%BC%BA%E5%A4%A7%E7%9A%84%E6%95%B0%E7%BB%84%E5%85%AC%E5%BC%8FArrayFunction.zip )。

    设置 JavaScript 电子表格

    我们可以先添加脚本 / css 引用并初始化 Spread 实例:

    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta charset="utf-8" />
    <title>SJS Array Formulas</title>
    
    <link href="http://cdn.grapecity.com/spreadjs/hosted/css/gc.spread.sheets.excel2013white.12.0.5.css" rel="stylesheet" type="text/css" />
    <script type="text/javascript" src="http://cdn.grapecity.com/spreadjs/hosted/scripts/gc.spread.sheets.all.12.0.5.min.js"></script>
    
    <script type="text/javascript" src="ArrayFormulaTest.js"></script>
    
    <script>
        window.onload = function () {
            var spread = new GC.Spread.Sheets.Workbook(document.getElementById("spreadSheet"), { sheetCount: 1 });
    
        }
    </script>
    </head>
    <body>
    <div id="spreadSheet" style="width: 825px; height: 800px; border: 1px solid gray">    </div>
    </body>
    </html>
    

    然后我们可以加载一个已经有表格的预制工作簿:

    spread.fromJSON(ArrayFormulaTest);
    var activeSheet = spread.getActiveSheet();
    

    使用数组公式添加表列

    我们将添加的第一个数组公式是创建一个总列。通常,我们会为每个单元格创建一个公式,以将数量列乘以价格列。我们可以创建一个完成此工作的数组公式,而不是创建要填充的公式:

    **= E3:E15 \* F3:F15**
    

    这将返回一个值数组而不是一个值,该值将应用于整个列。在 SpreadJS 中设置数组公式需要定义行,列,行计数,列数和公式,如下所示:

    activeSheet.setArrayFormula(2, 6, 13, 1, "E3:E15*F3:F15");
    

    然后我们可以格式化该新列:

    spread.options.allowUserEditFormula = true;
    activeSheet.getCell(1, 6).value("Total");
    activeSheet.setFormula(15, 6, "SUM(G3:G15)");
    activeSheet.getRange(1, 6, 15, 1).formatter("$#,#");
    

    使用数组公式可以大大减少为每行创建总列通常所需的公式数量。

    用数组公式汇总

    数组公式的另一个用途是更容易地汇总数据。例如,您可能希望仅在满足特定条件时将值添加到一起,这是使用常规公式无法轻松完成的。通常,您将使用 IF 语句,当应用于一系列单元格时,它将返回正值和假值的数组。数组公式是在单个单元格中有效使用它的唯一方法。我们可以为此制作两个表:卖方销售和每个卖方按产品销售:

    activeSheet.getCell(1, 8).value("Sales by Seller");
    activeSheet.getCell(2, 8).value("Seller");
    activeSheet.getCell(2, 9).value("Total");
    activeSheet.getCell(3, 8).value("Bob");
    activeSheet.getCell(4, 8).value("Chris");
    activeSheet.getCell(5, 8).value("Jill");
    
    activeSheet.getCell(7, 8).value("Sales by Product");
    activeSheet.getCell(8, 8).value("Seller");
    activeSheet.getCell(8, 9).value("Spread");
    activeSheet.getCell(8, 10).value("Wijmo");
    activeSheet.getCell(8, 11).value("C1 Studio");
    activeSheet.getCell(9, 8).value("Bob");
    activeSheet.getCell(10, 8).value("Chris");
    activeSheet.getCell(11, 8).value("Jill");
    

    我们可以从 Sales by Seller 表开始。在这种情况下,我们将使用数组公式为每个特定卖家添加所有销售。为了使公式更简单,我们可以继续添加一些自定义名称来使用:

    activeSheet.addCustomName("Seller", "$A$3:$A$15", 0, 0);
    activeSheet.addCustomName("Total", "$G$3:$G$15", 0, 0);
    

    然后我们像这样定义数组公式:

    =SUMIF(Seller, I4:I6,Total)
    

    然后我们可以一次在所有三个单元格中设置该数组公式:

    activeSheet.setArrayFormula(3, 9, 3, 1, "SUMIF(Seller, I4:I6,Total)");
    

    Sales by Product 表中的数组公式将类似,但在这种情况下,我们将按销售的产品将每个卖家的总数相加,这可以使用如下的数组公式来完成:

    **=SUMIFS(Total, Seller, \$I\$10:\$I\$12, Product, \$J\$9:\$L\$9)**
    

    这将为表中的每个单元格定义:

    activeSheet.addCustomName("Product", "$B$3:$B$15", 0, 0);
    activeSheet.setArrayFormula(9, 9, 3, 3, "SUMIFS(Total, Seller, $I$10:$I$12, Product, $J$9:$L$9)");
    

    这些只是数组公式的几个简单示例,但它们可以用于更多。现在,SpreadJS 支持数组公式,您可以轻松导入最高级的 Excel 文件。电子表格中更高级 Excel 功能的可能性是无穷无尽的。

    SpreadJS ( http://www.grapecity.com.cn/developer/spreadjs )

    下载试用 ( http://www.grapecity.com.cn/download/?pid=57 )

    纯前端表格控件 SpreadJS,是市面上布局与功能都与 Excel 高度类似的一款表格控件,全中文操作界面,适用于.NET 、Java、移动端等多个平台的类 Excel 数据开发,备受华为、中通、民航飞行学院等国内知名企业客户青睐。

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3596 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 10:46 · PVG 18:46 · LAX 02:46 · JFK 05:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.