如何将字符串转换为excel命名范围?

时间:2016-10-03 16:27:58

标签: c# .net excel vsto

我正在开发一个项目,我需要用一些数据填充一些excel命名范围。但是我收到这些命名范围的地址为字符串,而不是points = ['4.5','10.0','4.5','5.7','5.5','2.5','6.5','0.3','6.8','0.0','1.0','1.0','3.5','3.5','2','5','6.0','2.0'] x = [float(r) for r in points[0::2]] y = [float(r) for r in points[1::2]] # put x/y coordinates in tuples xy = list(zip(x,y)) # pre-define distance and add subsequent distances dist = 0 for r in xrange(len(xy)-1): dist += ( (xy[r][0]-xy[r+1][0])**2 + (xy[r][1]-xy[r+1][1])**2 )**0.5 。字符串看起来像Microsoft.Office.Tools.Excel.NamedRange。如何将这些字符串转换为NamedRange对象?有预定义的方法吗?感谢你的帮助!

3 个答案:

答案 0 :(得分:0)

如果字符串具有一致的模式,您可以将其拆分为一个数组,该数组包含查找所需命名范围所需的信息。

获得工作表名称和地址单元格后,您可以遍历命名范围的工作表,并将每个命名范围的地址与从字符串中提取的数据进行比较:

    private const int SHEET_ARRAY_INDEX = 0;
    private const int RANGE_START_ARRAY_INDEX = 1;
    private const int RANGE_END_ARRAY_INDEX = 2;

    static void Main(string[] args)
    {
        string myString = "Sheet1_A1_A2";
        string[] rangeInfo = myString.Split('_');

        string sheet = rangeInfo[SHEET_ARRAY_INDEX]; // holds "Sheet1"
        string arrayStart = rangeInfo[RANGE_START_ARRAY_INDEX]; // holds "A1"
        string arrayEnd = rangeInfo[RANGE_END_ARRAY_INDEX]; // holds "A2"
    }

有关迭代命名范围的信息,请参阅:https://bishoponvsto.wordpress.com/2009/09/01/reading-named-ranges-in-excel-using-c/

答案 1 :(得分:0)

它看起来很乱,我打赌有一个更简单/更好的方法来做到这一点......但是这样就完成了它

datetime: {10/1/2016 12:00:00 AM}
format: "ddd, dd MMM"
cultureInfo: {ar-SA}

希望这有助于

答案 2 :(得分:0)

您可以获取名称所指的范围:

range = _excelApp.ActiveWorkbook.Names.OfType<Name>().SingleOrDefault(n => n.Visible && n.Name == "rangeName")?.RefersToRange;

另一种方法是让Excel解析地址:

range = _excelApp.get_Range(address);

这将要求以下列格式之一指定地址:

  1. B4
  2. Sheet 1中!B4
  3. Sheet 1中!A1:D1
  4. namedRangeName
  5. 选项3似乎是要走的路,因为在你的情况下,Sheet1_A1_D1似乎不是一个命名范围,它看起来像一个时髦的地址字符串。我建议你用&#39;!&#39;替换第一个下划线。第二个是&#39;:&#39;并使用excelApp.get_range方法。