2014-10-26 4 views
0

Я пытаюсь написать надстройку уровня приложения Excel. Он выполняет SQL-запрос в базе данных и заполняет рабочий лист его результатами. Я думал, это должно быть просто ... Но нет. Есть ли способ вставить DataTable в рабочий лист excel? Что-то вроде этого:Вставить результат SQL-запроса в рабочий лист Excel с помощью VSTO

using (SqlConnection connection = new SqlConnection(connectionString)) 
{ 
    string cmdString = "SELECT * FROM [Table];" // Simplifyed query, in my add-in I need to JOIN 3 tables 
    SqlCommand cmd = new SqlCommand(cmdString, connection); 
    SqlDataAdapter sda = new SqlDataAdapter(cmd); 
    DataTable dt = new DataTable(); 
    sda.Fill(dt); 

    // What I need to write here to insert my DataTable contents into worksheet? 
} 

Возможно, я должен использовать другой подход (не DataTable)? Однако мой запрос может возвращать до 100000 строк данных с 4 столбцами. Так что, по-моему, приклеивание по ячейкам не будет работать.

+0

Это решение работает для me http://www.clear-lines.com/blog/post/Write-data-to-an-Excel-worksheet-with-C-fast.aspx. Я сделал 2D массив объектов и присвоил его диапазону. –

ответ

0

Если вы готовы прыгать через несколько обручей, то CopyFromRecordset руки вниз самый быстрый способ, который я видел, чтобы справиться с этим:

http://msdn.microsoft.com/en-us/library/office/ff839240(v=office.15).aspx

я могу заполнить миллион строк из SQL Server в Excel через несколько секунд, используя CopyFromRecordset.

В основном вам необходимо создать набор записей вместо таблицы данных, и вам необходимо использовать ADO (или DAO). Лично мне нравится держать этот код отдельно от всего остального и использовать ADO для этой функции, поскольку он имеет свои недостатки. Например, вы не можете использовать «используя» с соединениями ADO и т.д.

Вот более полный пример (в VB, но достаточно легко изменить на C#):

http://support.microsoft.com/kb/246335/