c#中的多语言excel格式条件公式
Multilanguage excel format conditions formula in c#
这是我的第一个问题,希望一切顺利。
我正在尝试将某种格式(例如背景颜色)应用于 excel 范围的偶数行或奇数行。我正在尝试使用 FormatCondition.Add 方法。
问题是应用程序必须以不同的 excel 语言(如西班牙语)运行。当我在 Add 方法中使用公式 =MOD(ROW(),2)
将格式仅应用于偶数行或奇数行时,它会抛出一个参数异常。这里是西班牙语:
System.ArgumentException: El valor no está dentro del intervalo
esperado.
这是我对异常的最佳翻译:
System.ArgumentException: The value isn't between the expected
interval.
问题似乎是公式中的 ,
字符。如果我使用 ;
,异常就会消失,但是 excel 不会翻译公式,所以当我用西班牙语打开 excel 文件时,条件格式不起作用。我必须使用公式 =RESIDUO(FILA();2)
的西班牙语版本,但它在英语中不起作用。如果将公式放在某个随机单元格中,它会很好地工作(所以我认为公式没有错):
excelSheet.Cells[1, 1] = "=MOD(ROW(),2)";
我的问题是:如何在 FormatConditions.Add 方法中使用多语言公式?
我的代码如下所示:
excelRange = excelRange.FormatConditions.Add(Excel.XlFormatConditionType.xlExpression,
Formula1: "=MOD(ROW(),2)=" + par);
"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"));
但结果总是一样。
如果您有一些线索可以帮助我,我们将不胜感激。感谢大家。
P.S: 对不起我的英语,我希望我解释得还不错。
我找到了解决方案(不是我认为的最佳解决方案,但无论如何...)。我的想法来自 here
基本思想是使用单个单元格将公式放入英文,然后从 Range.FormulaLocal
property:
中获取翻译后的公式
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);
我希望这对以后的人有所帮助。
这是我的第一个问题,希望一切顺利。
我正在尝试将某种格式(例如背景颜色)应用于 excel 范围的偶数行或奇数行。我正在尝试使用 FormatCondition.Add 方法。
问题是应用程序必须以不同的 excel 语言(如西班牙语)运行。当我在 Add 方法中使用公式 =MOD(ROW(),2)
将格式仅应用于偶数行或奇数行时,它会抛出一个参数异常。这里是西班牙语:
System.ArgumentException: El valor no está dentro del intervalo esperado.
这是我对异常的最佳翻译:
System.ArgumentException: The value isn't between the expected interval.
问题似乎是公式中的 ,
字符。如果我使用 ;
,异常就会消失,但是 excel 不会翻译公式,所以当我用西班牙语打开 excel 文件时,条件格式不起作用。我必须使用公式 =RESIDUO(FILA();2)
的西班牙语版本,但它在英语中不起作用。如果将公式放在某个随机单元格中,它会很好地工作(所以我认为公式没有错):
excelSheet.Cells[1, 1] = "=MOD(ROW(),2)";
我的问题是:如何在 FormatConditions.Add 方法中使用多语言公式?
我的代码如下所示:
excelRange = excelRange.FormatConditions.Add(Excel.XlFormatConditionType.xlExpression,
Formula1: "=MOD(ROW(),2)=" + par);
"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"));
但结果总是一样。
如果您有一些线索可以帮助我,我们将不胜感激。感谢大家。
P.S: 对不起我的英语,我希望我解释得还不错。
我找到了解决方案(不是我认为的最佳解决方案,但无论如何...)。我的想法来自 here
基本思想是使用单个单元格将公式放入英文,然后从 Range.FormulaLocal
property:
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);
我希望这对以后的人有所帮助。