C# 如何从excel中获取单元格地址
例如,给定行数和列数,如何从excel中获取单元格地址 第2行和第3列应返回C2。。。请帮助这一个(未经测试)也应适用于超过26的列地址: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)
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];