4

在用 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 的正确方法是什么?

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

4

2 回答 2

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

希望它会帮助某人。

于 2012-10-09T11:09:46.813 回答
0

您可能会考虑使用该Application.Union方法来构建您的范围。类似(未经测试):

Application.Union(sheet.get_Range("A1:A2"), sheet.get_Range("A5"));
于 2012-09-25T17:31:45.670 回答