ClosedXML AddConditionalFormat() 为 Excel 中的值添加引号(法语)

ClosedXML AddConditionalFormat() adds quotes to value in Excel (French)

所以我正在尝试使用 ClosedXML。在遇到本地化之前,我一直在成功使用它。条件格式适用于 Windows 的英语、意大利语和德语版本。它没有法语版本。

当语言环境为法语时,AddConditionalFormat().WhenEqualOrLessThan() 方法无法正常工作。它向条件语句添加引号。当我在 Excel 中打开它时,我得到规则:

Cell Value <= "-98.00002"

应该是:

Cell Value <= -98.00002

我 运行 这与其他语言一起使用,没有问题。

ws.Range(r, 1, r, 2).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.General;  // G3 compatibility

ws.Cell(r, 2).AddConditionalFormat().WhenEqualOrLessThan(-98.00002f)
    .Font.SetFontColor(XLColor.LightGray);
ws.SheetView.FreezeRows(2);
ws.Columns().AdjustToContents();

感谢@Jeeped,我开始深入研究代码。我发现在保存到有问题的字符串时该值正在更改。

GetQuoted in XLCFCellIsConverter.cs 在解析我使用的 Double (-98.00002) 时遇到问题。当我的机器处于法国文化时,它无法解析。所以我修改了调用来自:

    private String GetQuoted(XLFormula formula)
    {
        String value = formula.Value;
        Double num;
        if ((!Double.TryParse(value, out num) && !formula.IsFormula) && value[0] != '\"' && !value.EndsWith("\""))
            return String.Format("\"{0}\"", value.Replace("\"", "\"\""));

        return value;
    }

收件人:

    private String GetQuoted(XLFormula formula)
    {
        String value = formula.Value;
        Double num;
            if ((!Double.TryParse(value, NumberStyles.Any, CultureInfo.GetCultureInfo("en-US"), out num) && !formula.IsFormula) && value[0] != '\"' && !value.EndsWith("\""))
                return String.Format("\"{0}\"", value.Replace("\"", "\"\""));
        return value;
    }