2016-02-05 69 views
1

這是我的第一個問題,所以我希望我做的一切都好。多語言excel格式條件公式在c#

我想將一些格式(例如背景顏色)應用於excel範圍的偶數行或奇數行。我正在嘗試使用FormatCondition.Add方法。

問題是,應用程序必須在不同的excel語言(如西班牙語)中工作。當我在Add方法中使用公式=MOD(ROW(),2)將格式僅應用於偶數行或奇數行時,它會引發一個參數異常。這裏用西班牙語:

System.ArgumentException:El valor noestádentro del intervalo esperado。

在這裏,我最好的異常翻譯:

System.ArgumentException:值不是預期的 間隔之間。

問題似乎是公式中的,字符。如果我使用;,則異常消失,但隨後excel不會轉換公式,因此,當我用西班牙語打開excel文件時,條件格式不起作用。我必須使用公式=RESIDUO(FILA();2)的西班牙語版本,但這不適用於英語。而如果把公式中它的工作原理以及一些randome細胞(所以我想公式是沒有錯的):

excelSheet.Cells[1, 1] = "=MOD(ROW(),2)"; 

我的問題是:如何使用多語言公式FormatConditions.Add方法?

我的代碼看起來是這樣的:

excelRange = excelRange.FormatConditions.Add(Excel.XlFormatConditionType.xlExpression, 
              Formula1: "=MOD(ROW(),2)=" + par); 

「相提並論」是偶數還是奇數來區分的變量。

我試圖改變線程文化:

System.Globalization.CultureInfo before = System.Threading.Thread.CurrentThread.CurrentCulture; 
      try 
      { 
       System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US"); 
       excelRange = excelRange.FormatConditions.Add(Excel.XlFormatConditionType.xlExpression, Formula1: "=MOD(ROW(),2)=" + par); 
      } 
      finally 
      { 
       System.Threading.Thread.CurrentThread.CurrentUICulture = before; 
      } 

,並使用Type.InvokeMember方法來定義文化信息:

Excel.FormatConditions aux = excelRange.FormatConditions; 
Object[] args = { Excel.XlFormatConditionType.xlExpression, Type.Missing, "=MOD(ROW(),2)=" + par }; 
excelRange = aux.GetType().InvokeMember("Add", 
             System.Reflection.BindingFlags.InvokeMethod | System.Reflection.BindingFlags.Public, 
             null, 
             aux, 
             args, 
             culture: new System.Globalization.CultureInfo("en-US")); 

但結果總是相同的。

如果你有一些線索來幫助我,將非常感激。謝謝大家。

上傳:對不起,我的英文,我希望我已經解釋過它不是太糟糕。

回答

1

我已經找到了解決方案(不是最好的解決方案,我想,但無論如何...)。我把這個想法從here

的基本思想是利用單細胞把公式中英文然後您可以通過Range.FormulaLocalproperty翻譯公式:

Excel.Range temp = excelSheet.get_Range("a1"); 
dynamic tempValue = temp.Value2; 
temp.Formula = "=MOD(ROW(),2)=" + par; 
String formula = temp.FormulaLocal; 
temp.Formula = ""; 
temp.Value2 = tempValue; 
excelRange = excelRange.FormatConditions.Add(Excel.XlFormatConditionType.xlExpression, Formula1: formula); 

我希望這可以幫助別人的未來。