如果给出行和列号,我如何从excel获取Cell地址,例如
第2行和第3行应返回C2 ...请帮助
答案 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();
}