Отправка отдельных команд OLE для каждой ячейки Excel выполняется очень медленно, поэтому ключом является создание массива объектов, подобного этому:
int noOfRows = data.Count - 1;
int noOfColumns = mydataclass.GetType().GetProperties().Count() - 1;
Object[noOfRows, noOfColumns] myArray;
Отправка массива объектов позволяет отправлять смесь типов данных, например, строка, целое число, дата и т. д. Однако, если вы знаете, что, например, все данные представляют собой текст, вы можете просто отправить массив строк.
Массив необходимо заполнить из запроса либо путем присвоения каждого отдельного значения, либо, возможно, с помощью отражения для получения свойств объекта данных. Затем вы можете отправить массив в Excel следующим образом:
XLOLESheetobj.Range("A1","Z20").Value = myArray;
Вы можете заменить Z20 числом столбцов -> Char + количество строк -> string.