5

Powershell を使用して、Word 2010 (14.0.x) 文書を名前を付けて保存または閉じることができません。オンラインのすべてのツッツから、2.0で動作するはずのようですが、私はもうそれを持っていません.

単純なケース:

$Path = "C:\MyDoc.docx"
$Word = New-Object -comobject Word.Application
$Word.Visible = $True #Do this to close it out without task manager
$Doc = $Word.Documents.Open($Path)
$Doc.SaveAs($Path)
$Doc.Close()

この時点で、保存して閉じるまですべてが機能します。

Argument: '1' should be a System.Management.Automation.PSReference. Use [ref].
At line:5 char:1
+ $Doc.SaveAs($Path)
+ ~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodException
    + FullyQualifiedErrorId : NonRefArgumentToRefParameterMsg

Argument types do not match
At line:6 char:1
+ $Doc.Close()
+ ~~~~~~~~~~~~
    + CategoryInfo          : OperationStopped: (:) [], ArgumentException
    + FullyQualifiedErrorId : Argument types do not match

Get-Member が引数を持つと表示するメソッドは失敗したようです。たとえば、単純な $Doc.Save() の呼び出しは正常に機能するようです。これらのメソッドに関する MSDN の情報を見ると、 SaveChangesメソッドのようなものを使用しているように見えますが、正直なところ、現時点では私のスキルを超えています。

私は幸運を期待して $Null または $True または $False を渡そうとしましたが、それは私を悩ませ続けています。

私が見つけたのは、どうやらPS 3.0 Beta にリンクされているようで (人々にとっては 2.0 で問題なく動作するようです)、 Ed Wilson が返信していないコメントだけです。

4

3 に答える 3

3

私もこのエラーに苦労していましたが、PSReference の「Value」プロパティを呼び出すことで最終的に回避できました (ここで情報を取得しました: https://msdn.microsoft.com/en-us/library/system. management.automation.psreference(v=vs.85).aspx )

これにより、最終的にコードラインが作成されました。

$filename = [ref]"C:\Temp\pv_report.docx"    
[ref]$option = [Microsoft.Office.Interop.Word.WdSaveFormat] -as [type]
$document.SaveAs(([ref]$filename).Value, ([ref]$option::wdFormatDocumentDefault).Value)
$document.Close()
于 2016-08-12T10:47:39.653 に答える
1

[ref]を呼び出すときに使用するだけですSaveAs。これは私のために働いた:

$Path = "C:\MyDoc.docx"
$NewPath = "C:\MyDocRenamed.docx"
$Word = New-Object -comobject Word.Application
$Word.Visible = $True #Do this to close it out without task manager
$Doc = $Word.Documents.Open($Path)
$Doc.SaveAs([ref] $NewPath)
$Doc.Close()
于 2012-08-30T15:23:04.527 に答える
0

これはあなたを助けるかもしれません:

http://msdn.microsoft.com/en-us/library/office/cc626294(v=office.12).aspx#VSTO3PowerTools_OfficeInteropAPIExtensions

Office 相互運用 API 拡張機能

Office Interop API Extensions ツールは、Microsoft .NET Framework 3.5 および Microsoft Visual C# 3.0 にある新機能を使用して Office オブジェクト モデルをラップし、C# 開発者により生産的な環境を提供します。具体的には、拡張メソッド、オブジェクト初期化子、および null 許容型を使用して、簡素化された厳密に型指定された、場合によっては Microsoft Visual Basic に似た API を作成します。Office 用の完全なマネージ API ではありませんが、生のオブジェクト モデルを便利な方法で拡張するように設計されています。

Office オブジェクト モデルは、当初、Microsoft Visual Basic for Applications (VBA) や Visual Basic などの動的言語を対象としていました。そのため、遅延バインディングやオプションのパラメーターなど、いくつかの機能を広範囲に使用します。事前にバインドされ、厳密に型指定された言語である C# は、このコンテキストで使用すると扱いにくく、退屈で、エラーが発生しやすくなる可能性があります。Office Interop API Extensions は、簡素化され厳密に型指定された API を備えているため、C# 開発者は、このコンテキストで Visual Basic 開発者と同じくらい生産的になることができます。

PowerShell 3.0 が CLR4 に基づいていることは知っていますが、このアセンブリは正常に読み込まれるはずです。すべての [ref] パラメータが不要になります。この API の多くは拡張メソッド (powershell には存在しないもの) に基づいているため、多くのメソッドの最初のパラメーターとして$wordorインスタンスを渡す必要があります。$doc

于 2012-09-13T12:09:00.850 に答える