Я использую 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;
}