C # Excel Диапазон присваивания из массива, заполняющего только первое значение массива - PullRequest
0 голосов
/ 01 октября 2019

Я пытаюсь программно сгенерировать таблицы Excel для некоторого анализа данных, и я пытаюсь преобразовать использование ячеек [i, j] в использование диапазонов.

Проблема в том, что когда я звонюследующий метод со следующими значениями:

List<string> a = new List<string>() {"a", "b", "c", "d"};
List<string> b = new List<string>() {"aa", "bb", "cc", "dd"};

Wrapper.WriteListInDirection(sheet, a, 1, 1, Direction.Horizontal);
Wrapper.WriteListInDirection(sheet, b, 7, 7, Direction.Vertical);

Тогда вывод в листе Excel использует только 1-е значение в массиве.

У меня есть код ниже. Я проверил строку диапазона, которую я использую для выбора, и передаваемый массив. Поэтому для элемента "a" я получаю в excel "a", "a", "a", "a" в A1: D1и для «б» я получаю «аа», «аа», «аа», «аа» для G7: G10. Тем не менее, переданное значение arr является правильным (для случая "a" это arr это массив [4,1] с 'a', 'b', 'c', 'd' и для 'b' это массив [1], 4] с 'aa', 'bb', 'cc', 'dd').

   public static void WriteListInDirection<T>(
        Worksheet edo,
        IEnumerable<T> items,
        int cIndex,
        int rIndex,
        Direction dir)
    {
        int iCount = items.Count();
        int cEnd = dir == Direction.Horizontal ? cIndex + iCount - 1 : cIndex;
        int rEnd = (dir == Direction.Horizontal) ? rIndex : rIndex + iCount - 1;

        T[,] arr = new T[cEnd - cIndex + 1, rEnd - rIndex + 1];

        if (dir == Direction.Horizontal)
        {
            for (int i = 0; i < iCount; i++)
            {
                arr[i, 0] = items.ElementAt(i);
            }
        }
        else
        {
            for(int i = 0; i < iCount; i++)
            {
                arr[0, i] = items.ElementAt(i);
            }
        }

        string rStr = string.Format("{0}{1}:{2}{3}",
            ConvertColumnNumToLetter(cIndex),
            rIndex,
            ConvertColumnNumToLetter(cEnd),
            rEnd);

        Range r = edo.Range[rStr];
        r.Value = arr;
    }

Так где я все испортил?

Спасибо

1 Ответ

0 голосов
/ 02 октября 2019

Обнаружено, что я использовал неправильную индексацию массива.

Я думал, что массив для передачи в Range был [column, row], но вместо этого это [row, column]. Смена порядка исправления помогла решить мою проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...