2015-12-03 47 views
1

所以我試圖使用ClosedXML。我一直使用它,直到我遇到本地化。條件格式適用於英語,意大利語和德語版本的Windows。它不以法語。ClosedXML AddConditionalFormat()將引號添加到Excel中的值(法語)

當語言環境爲法語時,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(); 
+0

您是否嘗試過它沒有**女**關的末尾'-98.00002'?似乎* f *強制將該值視爲字符串。 – Jeeped

+0

我從浮點數刪除了'f',這並沒有解決問題。條件格式仍然添加引號。再次只在法文版。 – CaptainBli

回答

2

感謝@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; 
    }