Вставить результат SQL-запроса в таблицу Excel с помощью VSTO

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

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 столбцами. Таким образом, клеточное склеивание не будет работать, я думаю.

1 ответ

Если вы готовы перепрыгнуть через несколько обручей, то 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/

Другие вопросы по тегам