【问题标题】:excel 2003 and excel 2007 row,column address differenceexcel 2003 和 excel 2007 行、列地址的区别
【发布时间】:2009-12-28 17:26:07
【问题描述】:

在 excel 2003 行中,列地址指定为 A,1 和 C,12 但在 excel 2007 中,这种格式更改为整数,例如 1,1 和 3,12

是否有任何内置支持将旧地址转换为新地址,或者是否有任何自定义算法来转换这些值。

提前致谢

【问题讨论】:

    标签: c# excel-2007 excel-2003


    【解决方案1】:

    这是我们用来将 Excel 列字母转换为数字并返回的方法

    /// <summary>
    /// 1 -> A<br/>
    /// 2 -> B<br/>
    /// 3 -> C<br/>
    /// ...
    /// </summary>
    /// <param name="column"></param>
    /// <returns></returns>
    public static string ExcelColumnFromNumber(int column)
    {
        string columnString = "";
        decimal columnNumber = column;
        while (columnNumber > 0)
        {
            decimal currentLetterNumber = (columnNumber - 1) % 26;
            char currentLetter = (char)(currentLetterNumber + 65);
            columnString = currentLetter + columnString;
            columnNumber = (columnNumber - (currentLetterNumber + 1)) / 26;
        }
        return columnString;
    }
    
    /// <summary>
    /// A -> 1<br/>
    /// B -> 2<br/>
    /// C -> 3<br/>
    /// ...
    /// </summary>
    /// <param name="column"></param>
    /// <returns></returns>
    public static int NumberFromExcelColumn(string column)
    {
        int retVal = 0;
        string col = column.ToUpper();
        for (int iChar = col.Length - 1; iChar >= 0; iChar--)
        {
            char colPiece = col[iChar];
            int colNum = colPiece - 64;
            retVal = retVal + colNum * (int)Math.Pow(26, col.Length - (iChar + 1));
        }
        return retVal;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多