C#+ Excel。 NamedRange.Formula

公式的长度是否有限制? 如果我使用:

string form = "=ЕСЛИ(ЛЕВСИМВ(C2;3)=\"101\";\"цту\";ЕСЛИ(ЛЕВСИМВ(C2;3)=\"102\";\"сзту\";ЕСЛИ(ЛЕВСИМВ(C2;3)=\"103\";\"юту\";ЕСЛИ(ЛЕВСИМВ(C2;3)=\"104\";\"пту\";ЕСЛИ(ЛЕВСИМВ(C2;3)=\"105\";\"уту\";ЕСЛИ(ЛЕВСИМВ(C2;3)=\"106\";\"сту\";ЕСЛИ(ЛЕВСИМВ(C2;3)=\"107\";\"двту\";\"скту\")))))))"; xlWorkSheet.Range["D2"].FormulaLocal = form; 

没关系。

但是,如果我使用:

 string form = "=ЕСЛИ(ЛЕВСИМВ(C2;3)=\"101\";\"цту\";ЕСЛИ(ЛЕВСИМВ(C2;3)=\"102\";\"сзту\";ЕСЛИ(ЛЕВСИМВ(C2;3)=\"103\";\"юту\";ЕСЛИ(ЛЕВСИМВ(C2;3)=\"104\";\"пту\";ЕСЛИ(ЛЕВСИМВ(C2;3)=\"105\";\"уту\";ЕСЛИ(ЛЕВСИМВ(C2;3)=\"106\";\"сту\";ЕСЛИ(ЛЕВСИМВ(C2;3)=\"107\";\"двту\";ЕСЛИ(ЛЕВСИМВ(C2;3)=\"108\";\"скту\";\"fuck\"))))))))"; xlWorkSheet.Range["D2"].FormulaLocal = form; 

那个错误起飞了:

HRESULT:0x800A03EC

似乎写入.FormulaLocal (和其他forms的.Formula )string的长度有限制的。

通过在VBA中的实验,它有258个字符。 我可以在各种博客上find一些参考资料,build议大约256的限制,但可以find一个正式的来源。

有趣的是,如果string不包含a =前缀,则此限制不适用。

在Excel 2010上testing

为了完整性,这里是testing代码

 Sub Demo() Dim s As String, ss As String, f As String Dim r As Range Dim i As Long Set r = [A20] s = "=""This is a test of string length: " ss = "z" On Error GoTo EH For i = 1 To 350 f = s & ss & """" Debug.Print "" Debug.Print Len(f) r.FormulaLocal = f Debug.Print "OK" ss = "z" & ss Next Exit Sub EH: Debug.Print "Fail" End Sub 

结果的最后几行

  257 OK 258 OK 259 Fail 

它变得更加怪异:这个代码的作品

 Sub Demo() Dim s As String, ss As String, f As String Dim r As Range Dim i As Long Set r = [A20] s = "IF(A1=1,AAA999,FALSE)" ss = "z" r.FormulaLocal = "=" & s On Error GoTo EH For i = 1 To 60 Debug.Print "" Debug.Print Len(r.FormulaLocal) r.FormulaLocal = Replace(r.FormulaLocal, "AAA999", s) Debug.Print "OK" Debug.Print Len(r.FormulaLocal) Next Exit Sub EH: Debug.Print "Fail" End Sub 

这样做就是分段build立公式,每个公式本身就是一个有效的公式。 大约在1000个字符(也许是1024)失败。

检查以下页面的Excel限制:

https://support.office.com/en-nz/article/Excel-specifications-and-limits-1672b34d-7043-467e-8e27-269d656771c3

它特别说:

公式内容长度 – 8,192个字符

公式的内部长度 – 16,384字节