C# 中的多语言 Excel 格式条件公式
本文关键字:格式 条件 Excel 语言 | 更新日期: 2023-09-27 18:33:17
这是我在这里的第一个问题,所以我希望我做得很好。
我正在尝试将某种格式(例如背景颜色(应用于 excel 范围的偶数行或奇数行。我正在尝试使用 FormatCondition.Add 方法。
问题是应用程序必须使用不同的 excel 语言(如西班牙语(工作。当我使用 Add 方法中=MOD(ROW(),2)
公式仅将格式应用于偶数行或奇数行时,它会向我抛出参数异常。这里有西班牙语:
System.ArgumentException: El valor no está dentro del intervalo 埃斯佩拉多。
这是我对例外的最佳翻译:
System.ArgumentException:该值不在预期之间 间隔。
问题似乎是公式中的,
字符。如果我使用;
异常就会消失,但是 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"));
但结果总是相同的。
如果你有一些线索可以帮助我,将不胜感激。谢谢大家。
PS:对不起我的英语,我希望我已经解释了它不是太糟糕。
我已经找到了解决方案(我认为不是最好的解决方案,但无论如何......我从这里接受了这个想法
基本思想是使用单个单元格将公式放入英语,然后从 Range.FormulaLocal
属性获取翻译后的公式:
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);
我希望这可以帮助将来的某人。