Как мне установить массив C# в значение ячейки с помощью Excel Interop, чтобы ячейка «вылилась»

Я использую Microsoft.Office.Interop.Excel для открытия книги. Затем я нахожу нужный мне лист и нахожу именованную ячейку на листе. Я хочу иметь возможность устанавливать значение ячейки в массив, чтобы эти значения "выливались" (термин Excel).

Если я установлю значение ячейки в Excel вручную, вот так

={1;2;3}

Я получу вылив, где в первой ячейке будет 1, затем в той, что ниже, будет 2, а затем еще 3. То же самое для

={"foo";"bar";"fizz"}

Я хотел бы иметь функцию на C#, которая может принимать динамический массив и записывать его в ячейку. Я мог бы использовать StringBuilder для объединения всех значений, а затем задать формулу ячейки. Но если динамический массив — это строки, то мне нужно беспокоиться о кавычках.

Есть ли более простой способ добиться желаемого поведения? Вот что у меня есть на данный момент. Этот метод — один из методов для класса, который обрабатывает открытие файла Excel. Он также является частью плагина AutoCAD, который является объектом транзакции, но это не так уж и важно.


public void testMethod3(Transaction tr)//AutoCAD object
{
    var pages = Workbook.Worksheets.Cast<Worksheet>()
        .Where(sheet => sheet.Name.Contains("Export"))
        .ToList();

    if (pages.Count != 1) return;

    if (!Save)
    {
        pages.ForEach(p =>
        {
            p.Columns.ClearFormats();
            p.Rows.ClearFormats();
        });
    }

    dynamic range = pages[0]?.Names?.Item("LoopRoom")?.RefersToRange?.Cells;

    List<MyObject> myObjects = //data objects with string property RoomName

    object[,] data = new object[myObjects.Count+1,1];

    for (int i = 0; i < loops.Count; i++)
    {
        data[i, 0] = myObjects[i].RoomName;
    }

    


    range.Value2 = data;

}

Феофан
Вопрос задан21 августа 2024 г.

1 Ответ

2
Соломон
Ответ получен14 сентября 2024 г.

Ваш ответ

Загрузить файл.