Windows Powershell 2.0-如何将ODBC从系统DSN读入Excel 2007工作表

Windows Powershell 2.0-如何将ODBC从系统DSN读入Excel 2007工作表,excel,powershell,odbc,Excel,Powershell,Odbc,我在Excel文档中看到了QueryTables集合和ODBCConnection对象,但没有看到如何在powershell中使用它们 我想用一个工作表创建一个新工作簿,连接到一个系统DSN(不需要登录/passowrd),然后运行“SELECT*fromsometable”,并将结果放入工作表。Excel为2007;powershell是2.0;odbc连接是一个系统DSN 感谢使用Excel部分,您可以使用带有-COM参数的new object cmdlet来实例化Excel工作表: $xl

我在Excel文档中看到了QueryTables集合和ODBCConnection对象,但没有看到如何在powershell中使用它们

我想用一个工作表创建一个新工作簿,连接到一个系统DSN(不需要登录/passowrd),然后运行“SELECT*fromsometable”,并将结果放入工作表。Excel为2007;powershell是2.0;odbc连接是一个系统DSN


感谢使用Excel部分,您可以使用带有-COM参数的new object cmdlet来实例化Excel工作表:

$xl = New-Object -Com Excel.Application
$xl.Visible = $true
$wb = $xl.Workbooks.Add()
$ws = $wb.Worksheets.Item(1)
$ws.Cells.Item(1,1) = 1

然后,对于数据库访问,我将使用.NET DB访问层(PowerShell可以相当轻松地访问.NET)。请参阅这篇由两部分组成的文章(,)了解详细信息。

我将继续按照基思的方式行事。

在Excel中记录宏并在工作表中插入数据连接以绘制表格。录制的宏中的代码将指向使用上述方法直接从Powershell将表插入工作表所需的对象和方法

对我来说,结果很简单(以$ws作为工作表)

$qt=$ws.QueryTables.Add(“ODBC;DSN=favoriteDSN”、ws.Range(“A1”)、“从faveTable中选择*”) $qt.Refresh() $wb.SaveAs(“H:\favoriteNewFile.xlsx”)
谢谢你的指点;谢尔顿的文章看起来很有帮助。对于这个项目,我希望有一种更简单的方法,没有ADO或数据表。我希望能找到一种在Powershell中使用Excel对象的方法,模拟Excel的交互使用—指定数据源,指定数据目标左上角的单元格,然后运行查询。我所需要的只是在工作表1的A1单元格中输入“select*from sometable”,然后用名称保存工作簿。但是你提供的链接,我很高兴。它可以使用ado方法将数据复制到excel中,并写入Cells.Item(x,y),但是一次只进入一个单元格太慢了。因此,我想我最终会遇到一个不同的问题——我可以一次性将odbc数据集中的数据表写入Excel吗?结果是不是像我预期的那样更快?我认为我的其他选择是编写一个VBA宏来设置电子表格中的值,或者将数据转换成某种中间格式(csv或xml),excel可以读取这些格式,但我希望我可以在几行powershell中完成这一切。请考虑使用excel Range对象,它将允许您插入多个单元格(假设该值是二维数组)在一条语句中。我不确定是否遵循-您是建议应该有一种方法将powershell数组直接分配给一个范围对象,还是建议我一次填充一个单元格的范围,这可能比写入单元格更快?这很有希望,但我还没有达到预期目标。我首先要的是一个listobject.Worker.listobjects.add()可以获取数据源类型,其中有一个枚举,我相信我想要的是[Microsoft.Office.Interop.Excel.XlListObjectSourceType]::xlSrcExternal。我想我必须在指定xlSrcExternal的同时添加连接字符串,但找不到语法。如果我使用XlListObjectSourceType xlSrcRange,则Listobject.add()调用成功;如果我使用xlSrcExternal,则会失败(并显示消息“参数不正确”) $qt = $ws.QueryTables.Add("ODBC;DSN=favoriteDSN", ws.Range("A1"), "SELECT * FROM faveTable") $qt.Refresh() $wb.SaveAs("H:\favoriteNewFile.xlsx")