在VSTO中的Excel中使用正确的分隔符get_Range
在用C#编写的Excel的VSTO项目中,我需要从单元格的string列表中获取Range对象。
这是一个简化版本的问题:
string strRange = "A1:A2,A5"; Excel.Range r = sheet.get_Range(strRange);
但是,由于列表分隔符可以不同于在不同的文化设置逗号我实际上使用这个:
listSep = System.Globalization.CultureInfo.CurrentCulture.TextInfo.ListSeparator; string strRange = "A1:A2" + listSep + "A5"; Excel.Range r = sheet.get_Range(strRange);
我的问题是,当用户更改Excel选项>高级(Application.DecimalSeparator)中的“十进制分隔符”以匹配ListSeparator,这将无法正常工作。
用指定Range的string调用get_Range的正确方法是什么?
编辑:稍加修改,以添加我的评论下面的信息。
不是最干净的方法,但是这个解决方法帮助了我:
private static string GetRangeSeparator(Excel.Worksheet sheet) { Excel.Application app = sheet.Application; string sRng = app.Union(sheet.get_Range("A1"), sheet.get_Range("A3")).AddressLocal; sRng = sRng.Replace("$", string.Empty); string sSep = sRng.Substring(sRng.IndexOf("A3") - 1, 1); return sSep; }
希望它会帮助别人。
您可以考虑使用Application.Union
方法来构build您的范围。 像(未经testing的):
Application.Union(sheet.get_Range("A1:A2"), sheet.get_Range("A5"));