Spread for Windows Forms快速入门(9)---使用公式

Spread的公式计算引擎支持300多种内置函数,并支持通过内置函数和运算符来自定义公式。支持的函数包括日期、时间函数、工程计算函数、财务计算函数、逻辑函数、数学和三角函数、统计函数、文本函数等。

公式计算引擎支持单元格的引用、表单的交叉引用、循环引用、函数嵌套等。

放置公式在单元格中

你可以添加一个公式到一个单元格或单元格区域内。 你还可以向一行或者一列中所有的单元格添加公式。该公式是一个具有说明公式字符串的公式,通常是包含一个函数,运算符和常数的集合体。

当把一个公式分配到行或列的时候,这个公式为每一个行或列的单元格所用(假设该公式没有在单元格级别上被覆盖)。对于在一行或者一列中的公式,Spread使用行或列中的第一个单元格为基准位置。如果你使用相对寻址,这个公式为列A中的每一个单元格进行测算,每一个单元格中都有一个不同的结果 。如果你想要列A中每一个单元格对C2和D2的值的和进行计算(而不是C列和D列中每一个单元格的值进行计算),那么你就可以使用公式$C$2+$D$2,它使用了绝对地址。

你可以通过指定该对象的Formula属性来添加一个公式。 下面已经给出使用代码的步骤。

当你使用Cells对象的Text属性对单元格进行赋值时,表单使用单元格类型将一个指定的字符串转换为需要的数据类型。举例来说,一个数字单元格类型将字符串转换为双精度浮点数数据类型。当你使用Cells对象的Value属性对单元格进行赋值时,表单根据原样接受赋值的对象并且不会进行解析。因此如果你使用一个值进行设置,它仍然会是字符串。一些计算的函数(举例来说,SUM)忽视了单元格区域中的非数字的值。举例来说,如果单元格区域A1:A3包含数值{1,“2”,3},那么公式SUM{A1:A3}计算的结果为4因为SUM函数忽略了字符串“2”。请确定你正确的设置了每一个单元格的数字,这些数字用于公式的计算中并且你已经将其设置为正确的数据类型。

下面的这个示例显示了如何指定一个公式,找到第一个单元格的值的五十倍的结果,并且将结果放入另一单元格中。然后,它可以求得一个单元格区域的总和 (A1到A4)并且将结果放入第三列的每一个单元格中。


FpSpread1.ActiveSheet.Cells[2, 0].Formula = "PRODUCT(A1,5)";

FpSpread1.ActiveSheet.Columns[3].Formula = "SUM(A1:A4)";

公式中的单元格引用

除了数值,运算符,以及函数之外,一个公式还可以包括其它单元格值的引用。举例来说,要查找两个单元格的值的总和,该公式可以通过行和列查找到单元格的坐标。 你可以使用绝对单元格引用(根据行和列的实际坐标)或相对单元格引用(相对于当前单元格的坐标)。你可以使用ReferenceStyle属性,选择对表单使用哪种类型的单元格引用。一个公式不能同时包含绝对单元格引用和相对单元格引用。如果你已经将单元格引用样式变成不能显示公式的样式,Spread控件向公式提供一个问号作为占位符以代表不能显示的单元格引用。

下表包含若干个示例,它们有效地使用了公式的引用:


函数


描述


SUM(A1:A10)


在第一列中计算行1到行10的总和


PI()*C6


Pi倍单元格C6的值


(A1 + B1) * C1


将前两个单元格的数值相加,然后将这个结果乘以第三个单元格中的值。


IF(A1>5, A1*2, A1*3)


如果单元格A1的值大于5,那么将单元格A1的内容乘以2,否则将A1的内容乘以3

如果你在单元格B1的公式中定义相对单元格引用 为RC[-1]+R[-1]C,则公式将被解析为左边的(A1)单元格的 值加到上面的单元格(“B0“)的值当中去。 控件会将单元格"B0" 的值看作空的单元格。如果你更改单元格引用样式风格为A1的样式,公式会变为A1+B? ,因为A1的样式不能表示单元格"B0"。然而,控件仍认为公式会使用R1C1引用样式。

Spread不支持的区域索引:此区域的开始行 和结束行由不同的引用类型组成(例如,一个绝对坐标和一个相对坐标)。

两个行坐标要么都是绝对的,要么都是相对的。举例来说:

R1C[-1]:R5C[-1] ' 支持 (绝对行 : 绝对行)

R1C[-1]:RC[-1] ' 不支持 (绝对行 : 相对行)

RC[-1]:R5C[-1] ' 不支持 (相对行 : 绝对行)

R[-5]c[-1]:RC[-1] ' 支持 (相对行 : 相对行)

通过设置ReferenceStyle属性或者使用 默认ReferenceStyle值指定引用样式:


fpSpread1.Sheets[0].ReferenceStyle = FarPoint.Win.Spread.Model.ReferenceStyle.A1;

公式中的表单引用

当一个单元格的引用包括对另一个工作表单元格的引用时,这被称为表交叉引用。例如下面这个公式中的表交叉引用使用了加法操作符:

FirstRoundData!A2 + SecondRoundData!A2)

如果表单名称包含非字母数字字符( 例如,空格),那么在公式中用单引号扩上表单名称。举例来说,假设表单名称是“page one”,那么该公式就是SUM('page one'!$A$1:$A$5)。 如果表单名称包含单引号字符,那么在公式中使用两个单引号字符。举例来说,假设表单名称是“scott's page” 那么该公式就是SUM('scott''spage'!$A$1:$A$5).

下面的示例使用了公式中默认的表单名称:


fpSpread1.Sheets[0].Cells[0,0].Formula = "Sheet1!A3 + Sheet2!A2";

 

公式中的嵌套函数

你可以将一个函数嵌套在公式的另一个函数中。在下面的的这个示例中,两个单元格(使用SUM函数建立)的值的和被嵌入到PRODUCT公式。 首先单元格类型被设置,然后单元格值被设置。


fpSpread1.Sheets[0].Cells[3, 1].Formula = "PRODUCT(A1, SUM(A2,A3))";

在公式中使用循环引用

你可以引用一个单元格公式,这个单元格又包含该公式,就是一个循环引用。这是一个典型的函数递归的方式,通过对相同函数的迭代,接近一个最佳值。你可以选择函数迭代(递归)自身的次数,通过设置重新计算迭代次数属性。

如果公式“=COLUMNS(A1:C5)”在单元格C4中,就不会有结果返回。换句话说,如果该数组中最后一个行索引与列索引都大于公式所在的单元格的行索引与列索引,公式就不会进行计算。在这种情况下,单元格C4处于区域A1:C5中。这是公式中的一个循环引用,所以Spread并不计算公式的值,除非迭代被开启。

Spread通过迭代解决了循环公式的问题。在每次重新计算周期中,控件会进行指定次数的迭代。在每次迭代中,每一个重复的公式只进行一次计算。

一个循环引用的例子如下:

1. 设置公式单元格的单元格类型。

2. 使用表单的MaximumIterations属性设置重新计算迭代次数、

3. 设置表单的引用样式。

4. 使用单元格中的循环引用来定义公式


fpSpread1.ActiveSheet.Iteration = true;

fpSpread1.ActiveSheet.SetValue(0, 1, 20);

fpSpread1.ActiveSheet.MaximumChange = 5;

fpSpread1.ActiveSheet.MaximumIterations = 5;

fpSpread1.ActiveSheet.SetFormula(0, 2, "A1*3");

fpSpread1.ActiveSheet.SetFormula(0, 0, "B1+C1");

 

附:Spread for Windows Forms快速入门系列文章

Spread for Windows Forms快速入门(1)---开始使用Spread

Spread for Windows Forms快速入门(2)---设置Spread表单

Spread for Windows Forms快速入门(3)---行列操作

Spread for Windows Forms快速入门(4)---常用的单元格类型(上)

Spread for Windows Forms快速入门(5)---常用的单元格类型(下)

Spread for Windows Forms快速入门(6)---定义单元格的外观

Spread for Windows Forms快速入门(7)---单元格的交互操作

Spread for Windows Forms快速入门(8)---单元格中用户动作出发的事件

 

相关阅读:

Spread for Windows Forms 7新功能使用指南

Spread Studio 10.0v1 发布

SpreadJS 10.0v1 发布

 

时间: 2024-10-25 04:48:46

Spread for Windows Forms快速入门(9)---使用公式的相关文章

Spread for Windows Forms快速入门(11)---数据筛选

Spread支持开发人员自定义筛选数据的用户体验.基于行数据筛选,你可以允许用户分列进行筛选,从而仅显示符合了下拉列表中条件的行的数据,或者根据筛选结果更改行的外观.你可以使用默认的筛选方式,或者你可以从实际出发,自定义筛选器的每一个方面. 允许用户进行行筛选 默认情况下,表单禁止用户对表单的行进行筛选.你可以开启这一特性, 允许用户在所有列或者指定的列中进行行筛选.根据你要隐藏被筛除的列,还是更改列的外观,分别使用HideRowFilter类或StyleRowFilter类. 使用列Allow

Spread for Windows Forms快速入门(14)---文件操作

你可以将数据从Spread中存到几种不同类型的文件中或者可以在Spread中打开几种不同类型的数据文件.通过使用相应的代码,你可以将整个控件,某个特定的表单,或者某个特定单元格区域中的数据保存为几种不同的文件类型或者流.类似的,你可以允许用户对某几种文件类型进行文件操作. 保存到Excel文件 你可以使用ExcelSaveFlags枚举类型的UseOOXMLFormat选项,将数据保存到Excel格式文件(BIFF8 格式)或者Excel 2007 XML 格式(xlsx).默认的,当你保存为E

Spread for Windows Forms快速入门(15)---使用 Spread 设计器

通过 Spread 设计器用户可以快速地对 Spread 控件进行设计.无论用户是正在做一个关于 Spread 控件特性的原型研究,还是对于一个已经存在的 Spread 控件在某些方面进行进一步的定制,Spread 设计器专有的图形界面可节省大量的时间和精力.Spread 设计器允许用户添加数据,同时设置控件属性,而且还包括那些在 Visual Studio 中无法设置的属性.用户可以同时设置运行时和设计时属性,大多数情况下用户可以在应用设置之前预览效果,设置完成后,就可以将所有的设置应用到 S

Spread for Windows Forms快速入门(16)---用Spread设计器创建和编辑图表

Spread支持85种丰富多彩的图表效果.可以在Spread设计器中基于工作表的数据直接生成图表,操作简单.同时,软件人员还可以在Visual Studio设计环境中定制图表的所有元素,包括标题.序列.轴.样式.图例等.这一篇介绍如何用Spread设计器创建和编辑图表. 准备图表的数据 首先要启动Spread设计器.你可以在 Visual Studio .NET 中鼠标右键点击 Spread 控件,在弹出菜单中选择 Spread 设计器:也可以在安装菜单中启动独立运行的Spread 设计器. 在

Spread for Windows Forms快速入门(10)---绑定到数据库

下面的教程将带你创建一个工程, 并将Spread控件绑定到一个数据库. 在这个教程中,主要的步骤为: 1. 将Spread添加到一个数据绑定工程中 2. 设置数据库连接 3. 指定要使用的数据 4. 创建数据集 5. 把Spread控件绑定到数据库 6. 通过改变单元格类型改善显示效果   将Spread添加到一个数据绑定工程中 打开一个新的Visual Studio.NET工程.将工程命名为databind.将工程中的窗体文件命名为binding.cs(或.vb). 将FpSpread控件添加

Spread for Windows Forms快速入门(12)---数据分组(Outlook风格)

你可以设置的显示将行分组变成 OUTLOOK样式.对于大量的数据来说,这样会以用户需要的顺序显示数据.用户可以选择要进行的排序(以列为依据),然后控件会以此为依据将行组织起来,分级地显示数据.既可以通过双击列首的方式,也可以通过点击和拖拽此列进入页面头部分组栏的方式 选中要进行分组的列. 允许用户使用行分组 默认情况下,不允许用户在表单中进行行分组. 你可以开启这项特性,以便对整个表单的行进行分组.除了允许进行分组之外,你还需要允许移动列,因为用户通过使用点击和向分组栏中拖拽列首的方式进行分组,

Spread for Windows Forms快速入门(13)---数据排序

开发人员可以对Spread表单中的行和列进行自动排序操作,如根据指定的列,以升序方式自动排序表单中的数据.同时,也可以显示排序指示器.这些操作不会影响数据模型 仅仅涉及数据如何显示. 允许用户自动地对行进行排序 你可以设置表单以允许用户在列首被点击的情况下使用自动排序这一功能.当列首第一次被点击(被选中)时,未排序的图标就会显示.第二次点击时就会显示排序图标并且会将列进行排序.如果用户在相同的列上 连续点击,那么排序的方向就会被反转.这并不影响数据模型,只会影响数据如何显示.下面的图表显示了未排

Spread for Windows Forms快速入门(2)---设置Spread表单

让我们从设置Spread的大小和表单的外观开始学习如何定制Spread,这些操作通常放在Form的构造函数中进行,在InitializeComponent()之后调用.   自定义控件的大小 你可以设置Spread控件的规格,这决定了表单中可见的区域的大小.下面的图片中展示了你可以设置的规格,通过设置每一个规格中像素的数量进行设置.   计算Spread控件的高度时,假设滚动条是关闭状态,没有标题,计算所有行的高度以及每一个边界按1个像素计算,所以,如果现在有10行,每行20像素高度,总的高度为

Spread for Windows Forms快速入门(5)---常用的单元格类型(下)

在上一篇,我们介绍了常用了文本类型单元格.除了文本型单元格外,Spread还支持如下13种图形单元格类型:组合框单元格.按钮单元格.复选框单元格.超链接单元格.进度条单元格.条码单元格.颜色选择器单元格.图片单元.列表框单元格.复合列组合框单元格.复合选项单元格.富文本单元格.滚动条单元格等.下面我们介绍前五种的基本用法. 组合框单元格ComboBoxCellType 你可以使用一个组合框单元格以显示一个可编辑的下拉列表,用户通过在显示的列表中进行选择完成对值的输入.你可以指定项目的列表是否包括