Заполните Excel данными из запроса LINQ to SQL - PullRequest
4 голосов
/ 18 декабря 2008

Я пытаюсь отправить некоторые данные из запроса LINQ в C # на лист скорости Excel, используя OLE

У меня такой запрос:

Var data = from d in db.{MyTable}
           where d.Name = "Test"
           select d;

У меня объект Excel OLE работает нормально, я просто не могу понять, как заполнить ячейки в Excel данными из запроса LINQ.

PS: я использую Excel 2003, если это что-то меняет.

Может кто-нибудь помочь мне с этим?

Ответы [ 3 ]

3 голосов
/ 18 декабря 2008

Отправка отдельных команд 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.

0 голосов
/ 18 декабря 2008

Ваш лучший вариант - использование формата Excel XML. Я написал в блоге, как этого добиться: http://www.aaron -powell.com / blog.aspx? Id = 1237

Ваш другой вариант будет смотреть на поставщика LINQ для Excel - http://www.codeplex.com/xlslinq.

0 голосов
/ 18 декабря 2008

Я предполагаю, что вы не используете OLE в веб-сценарии, потому что он в конечном итоге потерпит неудачу.

Если вам просто нужны необработанные данные, вы можете создать дамп в текстовый файл с разделителями табуляции:

var lines = data.Select (d => d.Name + '\ t' + d.AnotherProperty + ...);

...