在VSTO中的Excel get_Range中使用的正确分隔符

时间:2012-09-24 08:33:35

标签: c# excel vsto cultureinfo

在用C#编写的Excel VSTO项目中,我需要从单元格的字符串列表中获取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,这不起作用。

使用指定范围的字符串调用get_Range的正确方法是什么?

编辑:稍加修改以添加我的评论信息。

2 个答案:

答案 0 :(得分:3)

不是最干净的方法,但这种解决方法帮助了我:

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;
}

希望它能帮到某人。

答案 1 :(得分:0)

您可以考虑使用Application.Union方法来构建范围。像(未经测试)的东西:

Application.Union(sheet.get_Range("A1:A2"), sheet.get_Range("A5"));