2017-03-24 31 views
1

私はpowershellでパスワード保護されたExcelシートを開き、そのシートに含まれている行の数に関するレポートを出力しようとしています。powershellでパスワード保護されたExcelを開きます。

シートがパスワードで保護されていない場合はスクリプトが正常に機能しますが、パスワードが設定されている場合はpowershellを開くことができません。

Exception calling "Open" with "3" argument(s): "Open method of Workbooks class failed" 
At line:3 char:35 
+ $workbook = $excel.Workbooks.Open <<<< ($excelSheet,$updatelinks,$password) 
    + CategoryInfo   : NotSpecified: (:) [], MethodInvocationException 
    + FullyQualifiedErrorId : ComMethodTargetInvocation 

You cannot call a method on a null-valued expression. 
At line:5 char:37 
+ $worksheet = $workbook.sheets.item <<<< ("Data") 
    + CategoryInfo   : InvalidOperation: (item:String) [], RuntimeException 
    + FullyQualifiedErrorId : InvokeMethodOnNull 

私は、$ password変数を取る場合、それは動作しますが、私は、手動でパスワードを入力する必要があります。

私の現在のスクリプトは

$Report = "S:\Business Support\excel tests\MI Tool - Live.csv" 
$path = "S:\Business Support\excel tests" 
[Array]$Results = $null 
$excelSheets = Get-Childitem -Path $path -Include "MI Tool - Live.xlsm" -Recurse 
$excel = New-Object -comobject Excel.Application 
$excel.visible = $false 
$password = "blablabla" 
$updatelinks = 0 


foreach($excelSheet in $excelSheets) 
{ 
$workbook = $excel.Workbooks.Open($excelSheet,$updatelinks,$password) 
$rowCount = $null 

    $worksheet = $workbook.sheets.item("Data") 
    $rowMax = ($worksheet.usedRange.rows).count 
    $rowCount += $rowMax 

$Results += New-Object Psobject -Property @{ 
    "File Name"=$excelSheet.Name 
    "Row Count"=$rowCount} 
$excelSheet.Name 
$workbook.Sheets.count 
$rowCount 
} 
$excel.quit() 
Stop-Process -Name EXCEL -Force 
$Results | select "File Name","Row Count" | Export-Csv $Report -NoTypeInformation 

これは私が取得エラーです。

+0

'$ password = 'blablabla''を実行してみてください - 同じ結果が得られますか?残念ながら、 –

+0

はいいいえ – Sal

答えて

1

オープンオーバーロードが正しくありません。パスワードは5番目の変数です。 Have a look at MSDN to see

表現.Open(ファイル名、UpdateLinks、読み取り専用、フォーマット、パスワード、WriteResPassword、IgnoreReadOnlyRecommended、起源、デリミタ、編集可能、通知、コンバーター、AddToMru、ローカル、CorruptLoad)

ので、 ReadOnlyとFormatを最初に実装する必要があります。これらの値を設定する必要があります。

$excel.Workbooks.open($path,0,0,5,$password) 

MSDNを参照して、値が2,3および4の位置でどのようなものであるかを理解してください。

+0

ありがとうございます。それは重複した質問だった場合はお詫びしますが、私は本当にここでそれを説明した答えを見つけることができます! – Sal

+0

それは私がここで答えを残した理由です。詐欺師はこのコードを持っていますが、問題は説明していません。二重引用符は弱いですが、答えにはあなたが見たいものが含まれていました。 – Matt

関連する問題