如何从excel获取Cell地址

时间:2010-04-13 10:01:24

标签: c# excel

如果给出行和列号,我如何从excel获取Cell地址,例如

第2行和第3行应返回C2 ...请帮助

6 个答案:

答案 0 :(得分:10)

我不是VSTO C#的大用户 - 我通常会选择VBA。但是,以下一对功能可能对您有用。不确定他们是否可以更精简:

public string RangeAddress(Excel.Range rng)
{
    return rng.get_AddressLocal(false, false, Excel.XlReferenceStyle.xlA1,
           missing, missing);
}
public string CellAddress(Excel.Worksheet sht, int row, int col)
{
    return RangeAddress(sht.Cells[row, col]);
}

RangeAddress将占用任何Excel范围并将您的地址退回。如果你想要绝对样式(带有美元符号,例如$ C $ 3),那么你必须将get_AddressLocal调用的前两个参数更改为true,为真。

要从行/列对中获取单元格地址,可以使用CellAddress。它确实需要一张表来获取地址。但是,如果您不想提供表单,则可以交换(Excel.Worksheet)ActiveSheet(这可能会也可能不会起作用,具体取决于您在VSTO会话中打开的内容)。

答案 1 :(得分:3)

只是改进,col--在错误的地方

static string GetCellAddress(int row, int col)
    {
        StringBuilder sb = new StringBuilder();

       do
        {
            col--;
            sb.Insert(0, (char)('A' + (col % 26)));
            col /= 26;
        } while (col > 0);
        sb.Append(row);
        return sb.ToString();
    }

答案 2 :(得分:2)

这个(未经测试的)也应该使用超过26的列地址:

using System.Text;

public string GetCellAddress(int row, int col) {
    StringBuilder sb = new StringBuilder();
    col--;
    do {
        sb.Insert(0, (char)('A' + (col % 26)));
        col /= 26;
    } while (col > 0);
    sb.Append(row);
    return sb.ToString();
}

更正:列地址向后

答案 3 :(得分:0)

我正在使用从零开始的行和列索引。所以我必须调整先前答案的代码以适应以下内容。 为了获得所有可能的地址i.E.需要一些试验和错误。 A1,Z2,AA2,ZZ10,......

    public string GetAddress(int col, int row)
    {
        col++;
        StringBuilder sb = new StringBuilder();
        do
        {
            col--;
            sb.Insert(0, (char)('A' + (col % 26)));
            col /= 26;

        } while (col > 0);
        sb.Append(row + 1);
        return sb.ToString();
    }

答案 4 :(得分:-1)

单元格(2,3)。地址

答案 5 :(得分:-2)

public string GetCellAddress(int row, int col) {
        return (char)((int)'A' + (row - 1)) + col.ToString();
}