2017-03-24 2 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 

가 작동하지만 수동으로 암호를 입력해야합니다 :

내 현재 스크립트 이것은 내가 오류입니다

$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

열기 과부하가 잘못되었습니다. 암호는 다섯 번째 변수입니다. 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

관련 문제