-1

私のスクリプトを機能させようとしていて、ここで助けが必要なのは私のコードです。

#excel
#open ap
$XL = new-object -com "Excel.Application"
$XLbooks = $XL.workbooks
$netci = [system.Globalization.CompareInfo]"en-us"
$wkbk = $XLbooks.PSBase.GetType().Invokemember("Add",[Reflection.BindingFlags]::InvokeMethod,$null,$XLbooks,$null,$newci)
$sheet = $XLbooks.worksheets.item(1)
$sheet.name = "name"
$sheet.cells.item($row,1).formulalocal = "Fred Nurk"
$file = "c\windows\scripts\test.xlsx"
[void]$wkbk.PSBase.GetType().InvokeMember("SaveAs",[Reflection.BindingFlags]::InvokeMethod,$null,$wkbk,$file,$newci)
("Close",[Reflection.BindingFlags]::Invokemedthod,$null,$wkbk,0,$newci)
$XL.quit()

エラー:

Cannot convert the "en-us" value of type "System.String" to type "System.Globalization.CompareInfo".
At C:\scripts\test.ps1:5 char:44
+ $netci = [system.Globalization.CompareInfo] <<<< "en-us"
    + CategoryInfo          : NotSpecified: (:) [], RuntimeException
    + FullyQualifiedErrorId : RuntimeException

You cannot call a method on a null-valued expression.
At C:\scripts\test.ps1:7 char:34
+ $sheet = $XLbooks.worksheets.item <<<< (1)
    + CategoryInfo          : InvalidOperation: (item:String) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

Property 'name' cannot be found on this object; make sure it exists and is settable.
At C:\scripts\test.ps1:8 char:8
+ $sheet. <<<< name = "name"
    + CategoryInfo          : InvalidOperation: (name:String) [], RuntimeException
    + FullyQualifiedErrorId : PropertyNotFound

You cannot call a method on a null-valued expression.
At C:\scripts\test.ps1:9 char:18
+ $sheet.cells.item <<<< ($row,1).formulalocal = "Fred Nurk"
    + CategoryInfo          : InvalidOperation: (item:String) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

Exception calling "InvokeMember" with "6" argument(s): "Microsoft Excel cannot access the file 'C:\Users\Jared\Document
s\c\windows\scripts\5ADD7000'. There are several possible reasons:
 The file name or path does not exist.
 The file is being used by another program.
 The workbook you are trying to save has the same name as a currently open workbook."
At C:\scripts\test.ps1:11 char:42
+ [void]$wkbk.PSBase.GetType().InvokeMember <<<< ("SaveAs",[Reflection.BindingFlags]::InvokeMethod,$null,$wkbk,$file,$n
ewci)
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : DotNetMethodTargetInvocation
4

2 に答える 2

0

私に飛び出す問題は、$netci = [system.Globalization.CompareInfo]"en-us"無効な構文です。System.Globalization.CompareInfo クラスでメソッドを呼び出すのではなく、その後に文字列を配置するだけです。PowerShell は[System.Globalization.CompareInfo]型キャスト演算子として解釈し、文字列 "en-us" をデータ型 System.Globalization.CompareInfo に変換できないと不平を言います - そのデータ型が存在しないためです。

「en-us」で動作するメソッドを呼び出す必要があります。MSDN からメソッドのリストを取得できます。

http://msdn.microsoft.com/en-us/library/system.globalization.compareinfo.aspx

必要なメソッドが GetCompareInfo であると仮定すると (私には最も可能性が高いと思われます - CompareInfo オブジェクトを返します)、その行を次のように記述します。

$netci = [System.Globalization.CompareInfo]::GetCompareInfo('en-us')

ところで、この変数は$netci作成時と同じです$newciが、スクリプトの残りの部分と同じであることに注意してください。

他のエラーについてはあまり詳しく調べていませんが、おそらく $newci を適切に作成できなかったことによるカスケード効果であるため、これを修正すれば他のエラーはなくなるのではないかと思います。

于 2013-04-30T16:38:17.927 に答える