【问题标题】:what is the best way to loop through alphabet in C# to output to Excel?在 C# 中循环遍历字母以输出到 Excel 的最佳方法是什么?
【发布时间】:2012-01-29 09:29:27
【问题描述】:

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

  var colheaders = new string[] {"Name", "Age", "Total", "Date"}

现在我有这样的代码来设置标题

            excelExport.SetCell("A", 1, "Name");
            excelExport.SetCell("B", 1, "Age");
            excelExport.SetCell("C", 1, "Total");
            excelExport.SetCell("D", 1, "Date");

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

因为我已经有一个字符串头数组,所以我想要这样的东西:

  foreach (string colheader in colheaders)
  {
     excelExport.SetCell("A", 1, colheader);
  }

但在这种情况下我需要动态设置字母“A”。像这样的:

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

注意:

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

【问题讨论】:

标签: c# arrays alphabet


【解决方案1】:

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

这里是问题:Fastest function to generate Excel column letters in C#

答案是:ExcelColumnFromNumber() 方法

【讨论】:

    【解决方案2】:
        private List<string> GetCol()
        {
            var x = Enumerable.Range(65, 26).Select(p => (char)p).ToList();
            List<string> result = new List<string>();
            foreach (var first in x)
            {
                result.Add(first.ToString());
            }
    
            foreach (var first in x)
            {
                foreach (var second in x)
                {
                    result.Add(first.ToString() + second.ToString());
                }
            }
            return result;
        }
    

    【讨论】:

    • 聪明!但是字母表中有 26 个字母,而不是 31 个。
    • 谢谢,我把它和波斯字母搞混了。
    • 嗯,也许 Excel 在波斯区域设置下运行时会使用波斯字母作为列标题?如果是这样,那么正确的答案会复杂得多!
    • @RedHat - 我没有看到你在任何地方传递参数。 .
    • @leora- 这是因为我的英语不好。
    【解决方案3】:

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

    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++;
    }
    

    【讨论】:

      【解决方案4】:

      根据SetCell的定义,你或许可以这样做:

      int i = 0; 
      foreach (string colheader in colheaders) 
      { 
          excelExport.SetCell(++i, 1, colheader);
      } 
      

      例如,如果这样定义 SetCell,这将起作用:

      void SetCell(object col, object row, object value)
      {
          _excelApp.Cells(row, col).set_Value(value);
      }
      

      【讨论】:

        猜你喜欢
        • 2019-11-20
        • 1970-01-01
        • 1970-01-01
        • 2023-03-29
        • 1970-01-01
        • 2021-07-16
        • 2021-09-20
        • 2011-07-17
        相关资源
        最近更新 更多