2015-01-24 3 views
2

Я хочу открыть файл Word и подключить его к третьей таблице в документе Excel в качестве источника данных для рассылки. Моя основная проблема: как я могу установить «Таблица3», чтобы не открывать это диалоговое окно?Call MailMerge.OpenDataSource() Установить соединение

Вот мои испытания (все в виде комментариев за #):

$Word = New-Object -Com Word.Application 
$Word.Visible = 'TRUE' 
$Doc = $Word.Documents.Open("D:\GoogleDrive\_POWERSHELL\Template.doc") 
$Doc.Activate() 

$DataPath = "D:\GoogleDrive\_POWERSHELL\DataSource.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\_POWERSHELL\DataSource.xls", Connection:="Table3") #SYNTAX ERROR: Fehlende ")" im Methodenaufruf/Missing ")" in Method Call 

#4 $Doc.MailMerge.OpenDataSource -Name "D:\GoogleDrive\_POWERSHELL\DataSource.xls" -Connection "Table3" #SYNTAX ERROR: Sie müssen auf der rechten Seite des Operators "-" einen Wertausdruck angeben. 

#5 $Doc.MailMerge.OpenDataSource("D:\GoogleDrive\_POWERSHELL\DataSource.xls", 'TRUE', 'TRUE', 'TRUE', 'TRUE', '', '', 'FALSE', '', '', '',"'Table3'", '', '', '', '') 

$Doc.MailMerge.OpenDataSource("D:\GoogleDrive\_POWERSHELL\DataSource.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\_POWERSHELL\MailMergeTest.doc" 
Start-Sleep 2 #Pause von 2 Sekunden 
$Doc.Close() 
$Word.Quit() 
  • # 6 (активный), кажется, подходите, но открывает окно для выбора таблицы в любом случае.
  • # 3 и # 4 - почему эти синтаксические ошибки? какой правильный синтаксис?
+0

# 3 не работает, поскольку PowerShell не поддерживает именованные параметры ('param: = value'). # 4 не работает, потому что 'OpenDataSource()' это метод, а не функция PowerShell, поэтому параметры должны передаваться как список значений в круглых скобках ('.OpenDataSource (v1, v2, ...)'). –

+0

Итак, нет никакого способа обойти эти списки $ defaults? –

+0

Нет, что я знаю. –

ответ

1

Последние версии Word не заботятся о строке подключения, которую вы предоставляете для файлов Excel. Если вам нужна специальная строка, вы должны использовать .odc-файл (или ODBC).

Что вам нужно, это найти параметр SQLStatement и установить его на правильный SQL - например.

"SELECT * FROM [Table3 $]"

Но точный синтаксис зависит от того, что именно Таблица3 есть. Если это таблица, называется "Таблица3", вам нужно будет

"SELECT * FROM [Table3 $]"

Если это именованный диапазон, вам нужно будет

«SELECT * FROM [ Таблица 3] «

Если это именованный стол, мне нужно будет проверить, работает ли он вообще.

Если это не имя, а действительно третий лист в книге Excel или третий «что-то еще» в книге, то я думаю, вам сначала придется автоматизировать Excel, чтобы найти имя объект, который вы хотите использовать.