尝试通过互操作将外部数据添加到Excel文件的例外情况

我试图通过自动化模拟Excel的“数据/从其他来源/从SQL Server”function的行为。 即:生成一个空白的电子表格,启动SQL Server导入向导,保存生成的电子表格,退出。

我logging了一个导入数据的macros。 由此产生的macros观相当简单[释义]:

With ActiveSheet.ListObjects.Add(SourceType := blah, Source := Array(blah), Destination := blah ).QueryTable [set a bunch of properties] End With 

我写了一个能够成功启动Excel,为A1写“testing”,保存文件并退出Excel的框架程序,所以我知道我很高兴去那里。

当我将ActiveSheet.ListObjects.Add()调用添加到我的程序时,它始终以一个ArgumentExceptionexception的forms出现。 为了比较起见,我添加了一个ListObjects.Add调用来生成一个本地的,而不是外部的表,这是否工作。

 Dim lo As Microsoft.Office.Interop.Excel.ListObject 'this works lo = ws.ListObjects.Add(SourceType:=Microsoft.Office.Interop.Excel.XlListObjectSourceType.xlSrcRange, Source:=ws.Range("$A$1"), Destination:=ws.Range("$D$1")) 'this nearly identical code does not lo = ws.ListObjects.Add(SourceType:=Microsoft.Office.Interop.Excel.XlListObjectSourceType.xlSrcExternal, Source:=arrConnectionString, Destination:=ws.Range("$D$1")) 

arrConnectionString是从macros中逐字拷贝的三元素string数组。 这只是一个长长的普通的连接string,被切成三块:

 {"OLEDB;Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;Data Source=BLAHBLAH\SQLEXPRESS;Use Procedure for Prepa" , _ "re=1;Auto Translate=True;Packet Size=4096;Workstation ID=BLAHBLAH;Use Encryption for Data=False;Tag with column collation when ", _ "possible=False;Initial Catalog=dummy"} 

确切的错误是:参数不正确。 (从HRESULTexception:0x80070057(E_INVALIDARG))。 有任何想法吗?

最初我考虑使用EPPlus,但它构造了整个电子表格内存。 由于我需要导出的数据的大小(120K行×300列),它总是会耗尽内存。