使用VSTO将SQL查询结果插入Excel工作表

时间:2014-10-26 12:29:44

标签: vsto excel-addins excel-automation

我正在尝试编写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)?但是,我的查询最多可返回包含4列的100000行数据。因此,我认为,逐个细胞的粘贴是行不通的。

1 个答案:

答案 0 :(得分:0)

如果您准备跳过几个环节,那么CopyFromRecordset是我见过的最快的方式:

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

我可以使用CopyFromRecordset在几秒钟内将SQL Server中的一百万行填充到Excel中。

基本上,您需要创建记录集而不是数据表,并且需要使用ADO(或DAO)。就个人而言,我喜欢将此代码与其他所有代码分开,并且仅将ADO用于此功能,因为它具有固有的弱点。例如,你不能使用"使用"与ADO连接等

这是一个更完整的示例(在VB中,但很容易更改为C#):

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