回答
怎麼樣使用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. 帶前綴字的C#字母排列
- 6. 使用多字母排列
- 7. C:按字母順序排列列表
- 8. 重新排列列表中的字母
- 9. 使用相同字母的排列
- 10. 如何使用列數來引用,而不是列字母
- 11. 電話號碼中字母和數字的排列
- 12. 將列號轉換爲字母的函數?
- 13. Visual Basics - 使用列號不是字母的範圍選擇方法
- 14. 查找字符串中的4個序列號使用C#
- 15. 通過追加字母來排列的循環使用C
- 16. ,我不能排序字母數字元素的列表
- 17. 列A與編號爲列C =列D的列B相匹配的編號?
- 18. 使用系列中的不同符號
- 19. jquery:使用「字母」作爲編號
- 20. 陣列不與C++中的花括號
- 21. 用撇號作爲最後可能的字母提取的話
- 22. 字母排列不行
- 23. Javascript代碼爲字母排列的div
- 24. Excel中按字母順序排列柱,從不同的列
- 25. 驗證字只使用隨機列表中的字母
- 26. 使用字符陣列中的C++
- 27. 使用列號計算列中數字的平均值
- 28. 不能按字母順序排列ASC不區分大寫字母
- 29. 列出具有'c'作爲第二個字母的文件(Linux)
- 30. 功能/的公式中的字母順序排列一個逗號分隔的列表/升序
此代碼是錯誤的。這裏是一個更正的版本:\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