Delphi 高手 自定义公式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Delphi 高手 自定义公式相关的知识,希望对你有一定的参考价值。

我有这样一个表(如图):
a、b、c、d分别代表规格1、规格2、规格3、规格4;每一种货物的计算公式是不一样的,由用户使用时自行设计计算公式。
我需要一个"公式解析函数" 来解析每个货物的公式,从而自动计算每个货物的单价。
说得简单点:我就是要个‘公式解析函数’及调用方法
哪个大虾帮帮偶!!!

e是表示什么?看你的示例里的公式,如果刚好能在delphi中实现。
你直接取出公式x,传到一个函数function f(x:string):string,函数里stringreplace(x,'a','%0:d',[rfreplaceall]),依次用%1:d取代b2取代c3取代d。
返回的一个字符串就是类似%0:d div %1:d +%2:d
到时候要用,就format(f(x),[a,b,c,d])

如果你写的公式是随便写的,比如除法是用% ,多取代一次,用div替换就好。哦注意div是整型相除,如果是浮点数相除要用/
刚刚没注意这个,抱歉
你还是全部用浮点型的,然后先替换div成/,再替换d %3:f
参考技术A 深入敌后 参考技术B 你可以把不同的公式, 按照计算的顺序, 分步骤来进行. 分清哪些是规格,哪些是常量. 括号等, 这就是解析. 其函数要根据实际情况,来编写的. 参考技术C 公式解析控件吧,去盒子下.
或者用策略模式,一个物品一个算法类

如何以条件格式自定义公式处理当前单元格?

【中文标题】如何以条件格式自定义公式处理当前单元格?【英文标题】:How to address the current cell in conditional format custom formula? 【发布时间】:2016-05-19 21:57:20 【问题描述】:

我需要使用自定义公式编写条件格式规则,当某个单元格(当前单元格列的第 3 行中的单元格)值为"TODAY()" 并且当前单元格为 @ 时应该触发987654325@。我知道如何检查另一个单元格,但是有没有办法在同一规则中检查当前单元格的值?

正如您在这张图片中看到的,一列具有不同的颜色,因为当前单元格的列的第 3 行包含当前日期。并且只有空单元格是彩色的。

这是我的规则:

=and($3:$3=TODAY(), ????)

它应该适用于A4:M10范围内的所有单元格

我需要它是一个规则,而不是多个规则的组合。我需要在????的地方放一些东西

换句话说,我需要将描述为“单元格为空”的值作为它的一部分放在自定义公式中。

这是一个示例电子表格:https://docs.google.com/spreadsheets/d/1***rX2aUg8vY5WGDDuBnLfPuL-UyrjFvzjdATS73aq8/edit?usp=sharing

【问题讨论】:

您示例中的 2 个表格在我的 google 电子表格 android 应用上看起来完全一样,不确定是什么问题 我有一个与 Android 无关的问题,抱歉。区别在于一列的颜色 啊。我现在甚至可以在 android 中看到它。当时的问题是关于所有相同的非空单元格......稍后再看看 【参考方案1】:

当前单元格由条件格式中范围的第一个单元格寻址。在您的示例中,范围是 A4:M10,因此您可以使用 A4 作为“当前单元格”。

检查空内容:

=A4=""


条件格式中的相对引用与绝对引用 just like copying a formula。

检查当前列行第二行的单元格是今天:

=A$2=TODAY()

使用AND 运算符组合:

=AND(A$2=TODAY(), A4="")

我已更新您的示例电子表格的副本 - https://docs.google.com/spreadsheets/d/1MY9Jn2xpoVoBeJOa2rkZgv5HXKyQ9I8SM3kiUPR9oXU/edit#gid=0

【讨论】:

【参考方案2】:

如果我想检查当前单元格是否为空,这对我有用:

=ISBLANK(INDIRECT(ADDRESS(ROW(),COLUMN())))

列中上一行的单元格将是

=ISBLANK(INDIRECT(ADDRESS(ROW() - 1,COLUMN())))

【讨论】:

您还需要启用“迭代计算”。请转到文件 > 电子表格设置并在 Calculation 选项卡 Iterative Calculation 上启用 我使用;而不是,来分隔参数【参考方案3】:

这是我发现以跨越一个范围的条件格式引用当前单元格的最短方法:

INDIRECT("RC",FALSE)

文档是here。

【讨论】:

这看起来像是在条件格式中使用“此单元格”的最优雅的方式,我喜欢它。但是,我找不到任何地方说使用没有任何数字的“RC”会达到你的预期。 它有效,但我在文档中看不到它,包括您在此处链接到的文档!是什么让你甚至尝试它? 我不记得了,而且 R1C1 的起源很古老,所以我还没有找到任何正式的规范。我可能是在网上搜索时发现的,这里有一篇提到“RC”方法的文章示例:powerspreadsheets.com/r1c1-formular1c1-vba ['...最后,如果您指的是单元格本身(创建循环引用),则第一部分单元格引用的只是“R”...']【参考方案4】:

好的,我自己找到了答案。正确的完整公式是:

=and($2:$2=TODAY(),INDIRECT("R"&ROW()&"C"&COLUMN(),FALSE)="")

这条规则:

INDIRECT("R"&ROW()&"C"&COLUMN(),FALSE)=""

检查当前单元格是否为空。

【讨论】:

【参考方案5】:

尝试应用到范围:

A3:M10

自定义公式为:

=$2:$2=TODAY()

【讨论】:

不,3:3 只会检查一个单元格,我需要检查一个范围内的所有单元格【参考方案6】:

在您的自定义函数中重写原始条件格式范围。然后,电子表格应用程序将采用当前单元格。结果,您的公式将是这样的

=function(A4:M10)

根据需要应用转换以使结果为真/假。

【讨论】:

以上是关于Delphi 高手 自定义公式的主要内容,如果未能解决你的问题,请参考以下文章

EXCEL中图表如何引用自定义的公式名称

给解释下delphi的一个自定义函数

Delphi 如何创建自定义的文件类型关联

Delphi 2009 - 在自定义 Delphi 组件中设置默认属性值

Delphi自定义函数声明及调用问题!

Delphi自定义组件如何在属性面板中实现打开文件的对话框?