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:对不起我的英语,我希望我已经解释了它不是太糟糕。

C# 中的多语言 Excel 格式条件公式

我已经找到了解决方案(我认为不是最好的解决方案,但无论如何......我从这里接受了这个想法

基本思想是使用单个单元格将公式放入英语,然后从 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);

我希望这可以帮助将来的某人。