回答
怎么样使用Application.ActiveCell.get_Address(true, true, Excel.AlReferenceStyle.xlA1, missing, missing)
,然后解析结果字符串或使用正则表达式来获取列标题?
我只是用:
string location = Application.ActiveCell.get_Address(true, true, Excel.AlReferenceStyle.xlA1, missing, missing);
string tokens = x.Split("$".ToCharArray());
MessageBox.Show(String.Format("Column {0}", result[0]));
public static string GetColumnName(int columnNumber)
{
const string letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
string columnName = "";
while (columnNumber > 0)
{
columnName = letters[(columnNumber - 1) % 26] + columnName;
columnNumber = (columnNumber - 1)/26;
}
return columnName;
}
以下是其中给你传递一个整数值对应的字母表的完整方法。
private String Number2String(int number, bool isCaps)
{
int number1 = number/27;
int number2 = number - (number1 * 26);
if (number2 > 26)
{
number1 = number1 + 1;
number2 = number - (number1 * 26);
}
Char a = (Char)((isCaps ? 65 : 97) + (number1 - 1));
Char b = (Char)((isCaps ? 65 : 97) + (number2 - 1));
Char c = (Char)((isCaps ? 65 : 97) + (number - 1));
string d = String.Concat(a, b);
if (number <= 26)
return c.ToString();
else
return d;
}
public static long GetColumnNumber(string columnName)
{
int letterPos = 0;
long columnNumber = 0;
for (int placeHolder = columnName.Length - 1; placeHolder >= 0; placeHolder--)
{
int currentSum = 1;
for (int multiplier = 0; multiplier < placeHolder; multiplier++)
currentSum *= 26;
int letterValue = (int) columnName[letterPos];
currentSum *= letterValue - 64;
columnNumber += currentSum;
if (letterPos != columnName.Length)
letterPos++;
//Console.WriteLine(((int)columnName[i]-64) + " = " + columnName[i]);
}
return columnNumber;
}
只有当columnName是大写字符串,出于某种原因b不是B时,此方法才能正常工作。因此需要column.Name.ToUpper()。 – Jim 2015-08-18 08:52:13
我使用这两个:
ColumnLetter = Replace(Replace(R.AddressLocal(ReferenceStyle:=1), "$", vbNullString), R.Row, vbNullString)
是:
public string GetExcelColumn(int index)
{
int quotient = index/26;
if (quotient > 0)
return GetExcelColumn(quotient - 1) + (char)((int)'A' + (index % 26));
else
return "" + (char)((int)'A' + index);
}
static IEnumerable<string> GetExcelColumns()
{
var alphabet = new string[]{""}.Union(from c in Enumerable.Range((int)'A', 26) select Convert.ToString((char)c));
return from c1 in alphabet
from c2 in alphabet
from c3 in alphabet.Skip(1) // c3 is never empty
where c1 == string.Empty || c2 != string.Empty // only allow c2 to be empty if c1 is also empty
select c1 + c2 + c3;
}
这通过使用双取代,其中R是单细胞Excel范围在VBA效果很好基于在Worksheet上使用的等效想法。在单元格公式中使用它,它甚至更短:
=SUBSTITUTE(ADDRESS(1,COLUMN(M1),4),1,"")
这将返回字母M并工作到列XFD。单元参考M1可以是任何地方的任何范围。左上方的列将返回范围或多个单元格。
它获取列中第一个单元格的地址,然后通过替换NullString去除尾部1。 (ADDRESS中的4确保地址作为相对地址返回,即一个没有和$符号。)
感谢barry houdini谁让我为此寻求一个好的答案。
- 1. C#字母顺序号码列表
- 2. C中的变音符号按字母顺序排列#
- 3. 使用jQuery按字母顺序排列列表中的列?
- 4. 如何在c中生成字母数字序列号
- 5. 按字母顺序排列不包含字母的列表
- 6. 使用多字母排列
- 7. 使用相同字母的排列
- 8. 如何使用列数来引用,而不是列字母
- 9. 电话号码中字母和数字的排列
- 10. 通过追加字母来排列的循环使用C
- 11. 用撇号作为最后可能的字母提取的话
- 12. Javascript代码为字母排列的div
- 13. 验证字只使用随机列表中的字母
- 14. 使用字符阵列中的C++
- 15. 不能按字母顺序排列ASC不区分大写字母
- 16. 隐藏Google Spreadsheets中的行号和列字母
- 17. 根据起始字母和列中的星号进行筛选
- 18. 功能/的公式中的字母顺序排列一个逗号分隔的列表/升序
- 19. 列出具有'c'作为第二个字母的文件(Linux)
- 20. 按字母顺序排列的C#列表
- 21. 按字母顺序排列字符串中的字母 - SAS
- 22. 错字母列表 - Prolog的
- 23. 在字符串的每个字母上显示序列号。 PHP
- 24. 用字母积累列表
- 25. 排序按字母顺序排列编号为
- 26. Excel - 将列号转换为字母equivlent vbs
- 27. “不能使用字符串作为散列引用”散列散列的散列值
- 28. 如何用字母创建按字母顺序排列的列表?
- 29. 按字母顺序排列[C]
- 30. 滚动到列表中的字母表(ArrayCollection dataProvider)(字母跳转)
此代码是错误的。这里是一个更正的版本:\t \t var location = sheet.Range [“A1”]。Offset [0,columnNumber - 1] .Address [true,true,XlReferenceStyle.xlA1,Missing,Missing]; \t \t \t var tokens = location.Split('$'); \t \t \t return tokens [1]; – 2012-01-21 17:35:42
@PhredMenyhert你的代码将只返回'B' – sam 2018-02-19 19:42:43