我正在尝试减少为应用程序生成报告所花费的时间。我们在Excel中生成报告。我们发现使用公式的Excel中的某些计算比在VB.net中以编程方式执行它要快得多。
所以基本上我需要在VB.net代码中使用以下公式(时差)。但它给了我一个错误。
=IF(F2>E2, F2-E2, ("24:00:00"-E2)+F2)
我尝试了什么
Dim f As String = "=if(RC[-1]>RC[-2], RC[-1]-RC[-2], (" & "24:00:00" & "-RC[-2])+RC[-1]"
wbXl.Sheets("time diff", 7).FormulaR1C1 = f
wbXl.Sheets("time diff").Cells(2, 7).FormulaR1C1 = """"=if(RC[-1]>RC[-2], RC[-1]-RC[-2], ("24:00:00" & "-RC[-2])+RC[-1]""""
和其他一些组合似乎没有任何效果。
任何指针或帮助都会非常有用。
答案 0 :(得分:0)
我从哪里开始......
Dim f As String = "=if(RC[-1]>RC[-2], RC[-1]-RC[-2], (" & "24:00:00" & "-RC[-2])+RC[-1]"
这不是Excel中的有效语法(你不能在你昏暗的时候指定值...如果你想这样做就得到.net。)
引号中的“24:00:00”是什么?为什么不减1?
所有报价......应该是:
Cells(2, 7).FormulaR1C1 = "=if(RC[-1]>RC[-2], RC[-1]-RC[-2], (""24:00:00""-RC[-2])+RC[-1])"
或更好:
Cells(2, 7).FormulaR1C1 = "=if(RC[-1]>RC[-2], RC[-1]-RC[-2], (1-RC[-2])+RC[-1])"
我还假设你正在使用RC表示法,因为你要进行动态录入。否则,只需使用单元ID(更易于维护)。重新阅读,它在.net中调用Excel(我正在收集)。否则,我会说工作表语法应该不同。 (并且大多数人更喜欢Range to Cell。Cell(2,7)
比Range("$G$2")
更难阅读。)
以下是我写这个公式的方法:
=B8+(B8<A8)-A8
(or in RC: =RC[-1]+(RC[-1]<RC[-2])-RC[-2])
删除原始文件的一些冗余:
=IF(B6>A6,B6-A6,("24:00:00"-A6)+B6)