더 이상 존재하지 않는 템플릿에 연결되는 일련의 Word 문서가 있습니다. 이로 인해 사용자가 열려고하면 문제가 발생합니다. 문서 목록을 가져 와서 각각을 반복하고 tempalte를 null로 설정할 수 있습니다. 이 방법으로 문제가 해결되지만 변경하기 전에 템플릿이 무엇인지 확인할 수 없습니다.Powershell에서 누락 된 Word 템플릿 읽기
서식 파일을 열 때 사용할 수없는 경우 Word는 첨부 된 서식 파일을 Normal.dot (x)로 바꿉니다. 그러나 찾으려는 템플리트는 문서의 템플리트 대화 상자에 있습니다. AttachedTempalte() 및 get_AttachedTemplate(). Name 문제의 문서가 Templates 대화 상자에 word로 나열된 다른 템플릿을 가지고있을 때 Name이 Normal.dot를 반환합니다.
나는 이것을 VBA에서 접근 할 수 있으며 PS에서 이것을 할 수 없다는 것은 실망 스럽다. 내가 엉망이 된 곳을 누구든지 볼 수 있니?
$word = new-object -comobject "Word.Application"
$doc = $word.Documents.Open({document path})
$word.Dialogs(Microsoft.Office.Interop.Word.WdWordDialog.wdDialogToolsTemplates).Template()
결과 :
Missing ')' in method call.
At :line:1 char:15
+ $word.Dialogs(M <<<< icrosoft.Office.Interop.Word.WdWordDialog.wdDialogToolsTemplates).Template()
작업 VBA : 나는 strTemplate에서 볼 수 템플릿 이름과 경로를 볼 수 있습니다
Dim doc as Word.Document
Dim strTemplate as String
Set doc = Documents.Open(Filename:=filename, Visible:=False)
doc.Activate
strTemplate = Word.Dialogs(wdDialogsToolsTemplates).Template
후.
나는 ps 스크립트를 확인하고 $ doc.Activate를 추가하는 것이 도움이되지 않는다. 나는 또한 interop와 VBA가 동일한 wdDialog를 사용하지 않는다는 것을 알아 차렸다. PS는 wdDialogToolsTemplates를 사용하여 wdDialogToolsTemplates 및 VBA를 사용합니다. 나는 다음과 같은
[Reflection.Assembly]::LoadWithPartialName("Microsoft.Office.Interop.Word") | out-null
[Enum]::GetNames("Microsoft.Office.Interop.Word.WdDialogs")
와 PS에 어셈블리를 점검하고 올바른 옵션이 wdDialogToolsTemplates입니다 확인했다.
$word.Dialogs([Microsoft.Office.Interop.Word.WdWordDialog]::wdDialogToolsTemplates).Template()
이 블로그 게시물을 참조 : PowerShell에서
작동하는 VBA 코드를 확인하는 데 도움이 될 수 있습니다. – EBGreen
복제 할 수는 있지만 주위를 둘러 볼 방법이 확실하지 않습니다. 나는 시간이 허락하는 한 그것을 계속 파고지만, 오늘은 좀 바쁘다. – EBGreen