Вставить результат 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#):