Я пытаюсь прочитать файлы Excel в Powershell, открыть их, защитить паролем и записать обратно.Я могу сделать это индивидуально, но в цикле сценарий завершается ошибкой:
#working individually
$f = ("C:my\path\Out Files\1234dv.xlsx")
$outfile = $f.FullName + "out"
$xlNormal = -4143
$xl = new-object -comobject excel.application
$xl.Visible = $True
$xl.DisplayAlerts = $False
$wb = $xl.Workbooks.Open($f)
$a = $wb.SaveAs("C:my\path\Out Files\test.xls",$xlNormal,"test")
$a = $xl.Quit()
$a = Release-Ref($ws)
$a = Release-Ref($wb)
$a = Release-Ref($xl)
#not working in loop, error after
function Release-Ref ($ref) {
([System.Runtime.InteropServices.Marshal]::ReleaseComObject(
[System.__ComObject]$ref) -gt 0)
[System.GC]::Collect()
[System.GC]::WaitForPendingFinalizers()
}
foreach ($f in Get-ChildItem "C:\my\path\Out Files"){
$ff = $f
$outfile = $f.FullName + "out"
$xlNormal = -4143
$xl = new-object -comobject excel.application
$xl.Visible = $True
$xl.DisplayAlerts = $False
$wb = $xl.Workbooks.Open($ff)
$a = $wb.SaveAs("C:\my\path\Out Files\test.xls",$xlNormal,"test")
$a = $xl.Quit()
$a = Release-Ref($ws)
$a = Release-Ref($wb)
$a = Release-Ref($xl)
}
Извините, мы не смогли найти 1234dv.xlsx.Возможно ли это было перемещено, переименовано или удалено?В строке: 16 символов: 5 + $ wb = $ xl.Workbooks.Open ($ ff) + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo: OperationStopped: (:) [], COMException + FullyQualifiedErrorId: System.Runtime.InteropServices.COMException COM-объект, который был отделен от базового RCW, использовать нельзя.В строке: 17 символов: 5 + $ a = $ wb.SaveAs ("C: \ my \ path ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ CategoryInfo: OperationStopped: (:)[], InvalidComObjectException + FullyQualifiedErrorId: System.Runtime.InteropServices.InvalidComObjectException
Эта ошибка повторяется для всех четырех тестовых файлов, с которыми я работаю.
Я не очень знаком сPowershell, поэтому я полагался на документы MS, и я не мог защитить паролем файлы в python, поэтому думал, что это будет проще. Я знаю, что это также не относится к паролю, но я пытался сначала запустить цикл. Любая помощьс благодарностью. Спасибо.