我有一张excel表,其中每个单元格上应用的公式很少,现在我想将它们转换为基于Web的应用程序。
一切似乎都很好但是很少有细胞具有彼此依赖的公式。
例如,
输入单元格:
费用:9790
分配:3%
非分配:97%
具有公式的单元格
Cell-1:(Cell-3 * Allocation) =(10000 * 3%)
结果:300美元
Cell-2:(非分配* Cell-3) =(10000 * 97%)
结果:$ 9700
Cell-3:(费用+单元-1 - 损坏费用) =(9790 + 300 - 90)
结果:$ 10000
所以这里我将如何计算依赖的细胞值,因为Cell-1依赖于Cell-3而Cell-3依赖于Cell-1?
编辑:
损坏费用:(总费用*分配)
并且总费用:基于Cell-3计算(条件如Cell-3 <= 10000然后3000等)
答案 0 :(得分:2)
我不知道excel能够做到这样的事情,但就这样吧。
事实证明,这是学校代数中的一个简单的练习:
z
x
然后你有公式:
x = z*Allocation
和
z = Cost + x - Fee
因此您可以将后者插入第一个并获取:
x = (Cost + x - Fee) * Allocation
在左侧获取所有x
:
(1-Allocation)*x = (Cost - Fee) * Allocation
并划分
x = (Cost - Fee) * Allocation / (1-Allocation)
没有插入z:
z = Cost - Fee + (Cost - Fee) * Allocation / (1-Allocation)
(你也可以简化最后一次)
所以让我们查看Cost = 9790
,Fee = 90
和Allocation = 0.03
:
x = 9700 * 0.03 / 0.97 = 300
z = 9700 + 300 = 10000
似乎是对的。
显然,使用某种自动转换工具,你可能想用一些常见的编程语言,如C#编写,这是很难的,因为你需要教你的程序如何做基本的代数;) - 但是如果你只有一些单元格,只想翻译它,你可以手动完成。
答案 1 :(得分:1)
您没有标记JavaScript,但这是一个客户端JS解决方案,可以在c#或asp.net中轻松实现:
var Cost = 9790,
Allocation = 0.03,
Fee = 90,
C1 = 0,
C3 = 0,
C1iterations = 100,
C3iterations = 100;
function Cell1() {
if(--C1iterations) {
C1 = Cell3() * Allocation;
}
else {
C1iterations = 100;
}
return C1;
}
function Cell3() {
if(--C3iterations) {
C3 = Cost + Cell1() - Fee;
}
else {
C3iterations = 100;
}
return C3;
}
document.body.innerHTML= 'Cell1: '+Cell1()+'<br>Cell3: '+Cell3();
您可以告诉Excel允许循环引用,在这种情况下,它默认为100次迭代。此代码复制了该功能,因此您无需通过代数。
所有变量都是全局的,用于演示目的,但是通过使用闭包可以很容易地将它们变为局部变量。