2015-02-05 37 views
0

公式長度是否有限制? 如果我使用: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

+1

在早期版本的Excel中,對於嵌套的IF語句,您可能會遇到限制(7)。使用查找表可能會更好。 – pnuts 2015-02-05 17:38:48

+0

如果我在Excel中使用這個公式,一切正常。 – 2015-02-05 17:43:06

+0

好,但那可能是因爲更高版本。您使用的是哪個版本的Microsoft Excel對象庫。 – pnuts 2015-02-05 17:45:09

回答

1

似乎有串的寫入.FormulaLocal(和其他形式的長度的限制.Formula

通過在VBA中的實驗,它可能是258個字符。我可以在各種博客上找到一些關於這個限制約256的參考文獻,但可以找到官方消息來源。

有趣的是,如果字符串不包含=前綴,則此限制不適用。

測試在Excel 2010中

對於completness,這裏的測試代碼

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 

這樣做是建立在部分的公式,每個部分作爲一個有效的公式本身。約1000個字符(可能爲1024)失敗。