Каков наилучший способ перебрать алфавит в C # для вывода в Excel? - PullRequest
5 голосов
/ 28 декабря 2011

У меня есть код, который экспортируется в 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);
  }

, но в этом случае мне нужно динамически установить букву «А».Примерно так:

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

ПРИМЕЧАНИЕ:

Кроме того, после Z мне нужно перейти к AA, затем AB, затем AC и т. Д.,чтобы соответствовать столбцам Excel, поэтому логика должна выходить за пределы 26 столбцов

Ответы [ 4 ]

5 голосов
/ 28 декабря 2011

Это не самое элегантное решение, но оно дает желаемый результат.

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 голосов
/ 29 декабря 2011

Мне удалось найти другой вопрос по stackoverflow, у которого было рабочее решение:

Вот вопрос: Самая быстрая функция для генерации букв столбцов Excel в C #

и ответ: метод ExcelColumnFromNumber ()

1 голос
/ 28 декабря 2011
    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;
    }
0 голосов
/ 28 декабря 2011

В зависимости от определения 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);
}
...