Delphi 高手 自定义公式
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Delphi 高手 自定义公式相关的知识,希望对你有一定的参考价值。
我有这样一个表(如图):
a、b、c、d分别代表规格1、规格2、规格3、规格4;每一种货物的计算公式是不一样的,由用户使用时自行设计计算公式。
我需要一个"公式解析函数" 来解析每个货物的公式,从而自动计算每个货物的单价。
说得简单点:我就是要个‘公式解析函数’及调用方法
哪个大虾帮帮偶!!!
你直接取出公式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 高手 自定义公式的主要内容,如果未能解决你的问题,请参考以下文章