将ISpreadsheetName转换为CellRange

时间:2015-08-21 10:46:04

标签: c# .net excel telerik

我正在使用Telerik控件来操作Excel工作簿。在这里,我通过以下方式访问Workbook Named Ranges:

        ISpreadsheetName Name_Level2;
        workbook.Names.TryGetSpreadsheetName("IP_Stredisko_Level2_End", out Name_Level2);

之后我从Name_Level2.RefersTo获得的结果是一个简单的字符串,如下所示:“= Sheet1!$ A $ 5”

我正在尝试将此引用转换为适当的CellRange对象,可在操作特定单元格值时使用该对象。

是否有任何内置方法如何进行转换,或者我必须自己编写方法?

1 个答案:

答案 0 :(得分:0)

最后,由于我没有在文档中找到任何内容,我创建了自己的转换器。希望它可以帮到某人。

    private static CellRange GetCellRange(string sReference, string sWorkbookName)
    {
        if (string.IsNullOrWhiteSpace(sReference))
            return null;

        sReference = sReference.Replace("=" + sWorkbookName + "!", string.Empty);
        sReference = sReference.Replace("$", string.Empty);

        string sColumn = string.Empty;
        string sRow = string.Empty;

        for (int i = 0; i < sReference.Length; i++)
        {
            if (char.IsDigit(sReference[i]))
                sRow += sReference[i];
            else
                sColumn += sReference[i];
        }

        int iRow = Convert.ToInt16(sRow) -1;
        int iCol = GetColIndex(sColumn);

        if (iRow >= 0 && iCol >= 0)
            return new CellRange(iRow, iCol,iRow,iCol);
        else
            return null;
    }
    //accepting up to AZ
    private static int GetColIndex(string sReference)
    {
        if (sReference.Length > 1)
        {
            int x = (int)sReference[1];
            return 25 + ((int)sReference[1] - 65);//25 as 26 letters in alphabet -1 (start from 0)
        }

        return (int)sReference[0] - 65;
    }