35 c# excel performance
什么是最快的c#函数,它接受并返回包含一个或多个字母的字符串,以便在Excel函数中使用?例如,1返回"A",26返回"Z",27返回"AA"等.
这被称为成千上万次,并且需要25%的时间来生成具有许多公式的大型电子表格.
public string Letter(int intCol) {
int intFirstLetter = ((intCol) / 676) + 64;
int intSecondLetter = ((intCol % 676) / 26) + 64;
int intThirdLetter = (intCol % 26) + 65;
char FirstLetter = (intFirstLetter > 64) ? (char)intFirstLetter : ' ';
char SecondLetter = (intSecondLetter > 64) ? (char)intSecondLetter : ' ';
char ThirdLetter = (char)intThirdLetter;
return string.Concat(FirstLetter, SecondLetter, ThirdLetter).Trim();
}
Run Code Online (Sandbox Code Playgroud)
Adr*_*der 49
我目前使用Excel 2007
public static string ExcelColumnFromNumber(int column)
{
string columnString = "";
decimal columnNumber = column;
while (columnNumber > 0)
{
decimal currentLetterNumber = (columnNumber - 1) % 26;
char currentLetter = (char)(currentLetterNumber + 65);
columnString = currentLetter + columnString;
columnNumber = (columnNumber - (currentLetterNumber + 1)) / 26;
}
return columnString;
}
Run Code Online (Sandbox Code Playgroud)
和
public static int NumberFromExcelColumn(string column)
{
int retVal = 0;
string col = column.ToUpper();
for (int iChar = col.Length - 1; iChar >= 0; iChar--)
{
char colPiece = col[iChar];
int colNum = colPiece - 64;
retVal = retVal + colNum * (int)Math.Pow(26, col.Length - (iChar + 1));
}
return retVal;
}
Run Code Online (Sandbox Code Playgroud)
正如其他帖子中所提到的,结果可以缓存.
wom*_*omp 19
我可以告诉你,最快的功能不是最漂亮的功能.这里是:
private string[] map = new string[]
{
"A", "B", "C", "D", "E" .............
};
public string getColumn(int number)
{
return map[number];
}
Run Code Online (Sandbox Code Playgroud)
bar*_*owc 14
根本不要转换它.Excel可以在R1C1表示法中使用,也可以在A1表示法中使用.
所以(道歉使用VBA而不是C#):
Application.Worksheets("Sheet1").Range("B1").Font.Bold = True
Run Code Online (Sandbox Code Playgroud)
可以很容易地写成:
Application.Worksheets("Sheet1").Cells(1, 2).Font.Bold = True
Run Code Online (Sandbox Code Playgroud)
该Range属性采用A1表示法,而Cells属性采用(行号,列号).
要选择多个单元格:( Range(Cells(1, 1), Cells(4, 6))如果不使用活动工作表,NB将需要某种对象限定符)而不是Range("A1:F4")
该Columns物业可以采用字母(例如F)或数字(例如6)
小智 5
这是我的版本:这没有任何限制,如2个字母或3个字母.只需传入所需的数字(从0开始)将返回Excel列标题,如字母序列,用于传入的数字:
private string GenerateSequence(int num)
{
string str = "";
char achar;
int mod;
while (true)
{
mod = (num % 26) + 65;
num = (int)(num / 26);
achar = (char)mod;
str = achar + str;
if (num > 0) num--;
else if (num == 0) break;
}
return str;
}
Run Code Online (Sandbox Code Playgroud)
我没有测试这个性能,如果有人能做到这一点对其他人来说会很棒.(抱歉懒惰):)
干杯!