我想打开一个 Word 文件并将其连接到 Excel 文档中的第 3 个表作为邮件数据源。我的主要问题:如何设置"Table3"以避免打开此对话框?
这是我的试验(全部作为#后面的评论):
$Word = New-Object -Com Word.Application
$Word.Visible = 'TRUE'
$Doc = $Word.Documents.Open( "D:GoogleDrive_POWERSHELLTemplate.doc" )
$Doc.Activate()
$DataPath = "D:GoogleDrive_POWERSHELLDataSource.xls"
$DataTable = "Table3"
$default = [Type]::Missing
#1 $Doc.MailMerge.OpenDataSource( "D:GoogleDrive_POWERSHELL DataSource.xls" ) #this works fine but opens a box to choose the table
#2 $Doc.MailMerge.OpenDataSource( $DataPath ) #this works fine too but opens a box to choose the table
#3 $Doc.MailMerge.OpenDataSource( Name:="D:GoogleDrive_POWERSHELLDataSource.xls", Connection:="Table3" ) #SYNTAX ERROR: Fehlende ")" im Methodenaufruf / Missing ")" in Method Call
#4 $Doc.MailMerge.OpenDataSource -Name "D:GoogleDrive_POWERSHELLDataSource.xls" -Connection "Table3" #SYNTAX ERROR: Sie müssen auf der rechten Seite des Operators "-" einen Wertausdruck angeben.
#5 $Doc.MailMerge.OpenDataSource( "D:GoogleDrive_POWERSHELLDataSource.xls", 'TRUE', 'TRUE', 'TRUE', 'TRUE', '', '', 'FALSE', '', '', '',"'Table3'", '', '', '', '' )
$Doc.MailMerge.OpenDataSource( "D:GoogleDrive_POWERSHELLDataSource.xls", $default, $default, $default, $default, $default, $default, $default, $default, $default, $default, "Table3", $default, $default, $default, $wdMergeSubTypeWord2000 )
#7 $Doc.MailMerge.OpenDataSource( $DataPath, $default, $default, $default, $default, $default, $default, $default, $default, $default, $default, $DataTable, $default, $default, $default, $default )
Write-Host $Doc.MailMerge.DataSource.Name
#$Doc.MailMerge.Execute()
#$Doc.MailMerge.Destination = "D:GoogleDrive_POWERSHELLMailMergeTest.doc"
Start-Sleep 2 #Pause von 2 Sekunden
$Doc.Close()
$Word.Quit()
- #6(活动)似乎很接近,但无论如何都会打开选择表格的框。 #
- 3 和 #4 - 为什么会出现这些语法错误? 正确的语法是什么?
最新版本的 Word 不关心为 Excel 文件提供的连接字符串 - 如果需要特殊字符串,则必须使用 .odc 文件(或 ODBC)。
您需要的是找到 SQLStatement 参数并将其设置为正确的 SQL - 例如
"从 [表3$]中选择 *"
但确切的语法取决于 Table3 的确切含义。如果是名为"Table3"的工作表,则需要
"从 [表3$]中选择 *"
如果是命名范围,则需要
"从 [表 3] 中选择 *"
如果它是一个命名表,我将不得不检查它是否有效。
如果它不是一个名称,而是Excel工作簿中的第三个工作表,或者工作簿中的第三个"其他东西",那么我认为您首先必须自动化Excel以查找要使用的对象的名称。
这个变体对我有用:
$Doc.MailMerge.OpenDataSource( $DataPath,$default,$default,$default, $default, $default,$default,$default,$default,$default,$default,$default, "SELECT * FROM [Sheet1$]" )