如何将未指定数量的行和列从 SQL Server 粘贴到 Excel 工作表

How to paste unspecified number of rows and columns from SQL Server to Excel worksheets

提问人:tester12341234 提问时间:9/15/2023 最后编辑:JohnMtester12341234 更新时间:9/16/2023 访问量:68

问:

自从我创建VBA宏以来已经有一段时间了。需要将多个表从 SQL Server 导出到 Excel 工作簿中。VBA 的某些 SQL 查询解决方案使用用户名/密码组合,我使用的 SQL Server 是 Microsoft 身份验证作为登录。

当我尝试使用将具有未指定范围的 SQL Server 粘贴到工作表时,我当前遇到错误。不需要完整的解决方案,只需要那些可以帮助我到达我需要的地方的部分。谢谢!我目前的解决方案需要从 SQL 手动复制表。Range("A1").pastespecial

Sub Format_Data_for_AddData()
'
' Format_Data_for_AddData Macro
' Add data copied to clipboard to a workbook, formatting cells to text, changing sheet name
'
' Keyboard Shortcut: Ctrl+r
'
Dim prevSheet As Worksheet 'Previous sheet to paste data into after
Dim activeBook As Workbook 'Active workbook being pasted into


    'Set current sheet to previous sheet
    Set prevSheet = ActiveSheet
    'Format cells to text
    Sheets.Add After:=Sheets(Sheets.Count)
    'Set current sheet to previous sheet
    Set prevSheet = ActiveSheet
    Cells.NumberFormat = "@"
    Range("A1").PasteSpecial

End Sub
sql-server excel vba

评论

1赞 taller 9/15/2023
错误是什么?
0赞 Tim Williams 9/15/2023
“当我尝试从 sql server 粘贴时” - sql server 是一个数据库平台,而不是特定的图形用户界面,那么您究竟从哪里复制?
0赞 tester12341234 9/15/2023
我收到运行时错误“1004”Range 类的 PasteSpecial 方法失败。
0赞 tester12341234 9/15/2023
对不起,我应该详细说明 Tim,在对 excel 工作簿运行大约 30 个选择查询后,我正在复制 sql server management studios 中的数据表
1赞 LineBreak 9/15/2023
如何使用 sql Server Management Studio 的导出向导?右键单击数据库,然后在上下文菜单中选择“任务”->导出数据。对于“数据源”,选择“SQL Server Native Client”和“目标 MS Excel”等内容。其余的我应该或多或少不言自明。

答:

0赞 Randy in Marin 9/16/2023 #1

这是使用 VBA 的另一种方法,它要容易得多。PowerShell 中的这个简短且完全有效的示例加载数据,创建 Excel 文档,然后打开它进行显示。联机搜索 DBATools 和 Import-Excel 模块安装以了解详细信息。

$cmsServer = 'myserver'
$query = 'SELECT * FROM dbo.ad_servers'
$dataSet = Invoke-DbaQuery -SqlInstance $cmsServer -Database 'CMS' -Query $query
$dataSet | 
    Select-Object OperatingSystem, LastLogonEstimate | 
    Export-Excel -Path 'c:\temp\myreport.xlsx' -AutoSize -WorksheetName 'SampleExport' -ClearSheet -Show

如果要将多个表导入到同一文档中,请使用相同的文档和不同的工作表名称调用 Export-Excel。如果您希望打开文档,请使用“仅在最后一次调用时显示”。(文档在更新时需要关闭。

$dataSet1 | 
    Select-Object Col1, Col2 | 
    Export-Excel -Path 'c:\temp\myreport.xlsx' -AutoSize -WorksheetName 'Data Set 1' -ClearSheet
$dataSet2 | 
    Select-Object Col1, Col2 | 
    Export-Excel -Path 'c:\temp\myreport.xlsx' -AutoSize -WorksheetName 'Data Set 2' -ClearSheet
$dataSet3 | 
    Select-Object Col1, Col2, Col3 | 
    Export-Excel -Path 'c:\temp\myreport.xlsx' -AutoSize -WorksheetName 'Data Set 3' -ClearSheet -Show

如果存在格式问题,除了 AutoSize 之外,其他参数可能会有所帮助。例如,Numberformat。

如果工作表已存在,ClearSheet 将清除该工作表。不需要新文档。