在C#中循环字母表以输出到Excel的最佳方法是什么?

leo*_*ora 5 c# arrays alphabet

我有导出到excel的代码,我有一个列数组..

  var colheaders = new string[] {"Name", "Age", "Total", "Date"}
Run Code Online (Sandbox Code Playgroud)

现在我有代码看起来像这样设置标题

            excelExport.SetCell("A", 1, "Name");
            excelExport.SetCell("B", 1, "Age");
            excelExport.SetCell("C", 1, "Total");
            excelExport.SetCell("D", 1, "Date");
Run Code Online (Sandbox Code Playgroud)

问题是,如果我有50列,并且我想在开始时添加一列,我必须更新每个列中的字母"A","B","C"等..

因为我已经有一个字符串标题的数组我想要这样的东西:

  foreach (string colheader in colheaders)
  {
     excelExport.SetCell("A", 1, colheader);
  }
Run Code Online (Sandbox Code Playgroud)

但在这种情况下我需要动态设置字母"A".像这样的东西:

  int i = 0;
  foreach (string colheader in colheaders)
  {
     excelExport.SetCell(GetCol(i), 1, colheader);
     i++;
  }
Run Code Online (Sandbox Code Playgroud)

注意:

此外,在Z之后,我需要去AA,然后是AB,然后是AC等..匹配Excel列,因此逻辑必须超过26列

Sco*_*ger 5

这不是最优雅的解决方案,但它确实产生了您正在寻找的结果.

const int maxAlpha = 26;
int charNum;
var timesMaxed = 0;
var counter = 0;
var asciiStartPoint = 65;

foreach (string colheader in colheaders)
{
    var result = String.Empty;

    if (counter == maxAlpha)
    {
        timesMaxed++;
        counter = 0;
    }

    if (timesMaxed > 0)
    {
        charNum = asciiStartPoint + (timesMaxed - 1);
        result += ((char)charNum).ToString();
    }

    charNum = asciiStartPoint + counter;
    result += ((char)charNum).ToString();

    excelExport.SetCell(result, 1, colheader);
    counter++;
}
Run Code Online (Sandbox Code Playgroud)


leo*_*ora 4

我在 stackoverflow 上找到了另一个有有效解决方案的问题:

问题是:Fastest function togenerate Excel columns letter in C#

答案是:ExcelColumnFromNumber() 方法