Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从excel中获取单元格地址_C#_Excel - Fatal编程技术网

C# 如何从excel中获取单元格地址

C# 如何从excel中获取单元格地址,c#,excel,C#,Excel,例如,给定行数和列数,如何从excel中获取单元格地址 第2行和第3列应返回C2。。。请帮助这一个(未经测试)也应适用于超过26的列地址: public string GetCellAddress(int row, int col) { return (char)((int)'A' + (row - 1)) + col.ToString(); } using System.Text; public string GetCellAddress(int row, int col)

例如,给定行数和列数,如何从excel中获取单元格地址

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

这一个(未经测试)也应适用于超过26的列地址:

public string GetCellAddress(int row, int col) {
        return (char)((int)'A' + (row - 1)) + col.ToString();
}
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();
}

更正:列地址是向后的

单元格(2,3)。地址

我不是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,true


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

只是一个改进,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();
    }

我使用的是从零开始的行和列索引。因此,我不得不将先前答案的代码修改为以下内容。 为了使所有可能的地址(即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();
    }

另请参见:这将是@Alastair的答案。这将返回错误的值:第1列第27列将返回A27,即第1列第27行。只需切换行和列就会返回[1,这也是错误的。正确的是AA1。这将返回列27的BA1,而不是AA1。完美!非常感谢!这本身对我来说非常好:)范围。地址[false,false,xl.XlReferenceStyle.xlA1];