У вас есть что-то вроде logi c и синтаксические ошибки в вашем коде.
Если вы установили Excel как нежизнеспособный, вы не сможете установить его как активное окно.
Итак, это ...
$Excel.visible = $False
....
$worksheet.activate()
... должно быть это ...
$Excel.visible = $True
Вы запускаете эту функцию ...
Aanpassen_excel_dagcontrole
... в L oop, но эта функция открывает и закрывает MSExcel.exe на каждом проходе. Это вызовет проблемы, потому что запуск и завершение работы продуктов MSOffice требуют времени, но ваш l oop этого не ждет.
Приложение Office следует открывать, обрабатывать, закрывать файлы и после этого только один раз. все обработаны, затем закройте используемое приложение MSOffice.
Я бы посоветовал вам удалить это ...
$Excel.Quit()
Remove-Variable -Name excel
[gc]::collect()
[gc]::WaitForPendingFinalizers()
... из этой функции и сделать его последней записью в сценарий. Итак, это:
# Start MSExcel only once
$Excel = New-Object -ComObject excel.application
$Excel.visible = $True
function Aanpassen_excel_dagcontrole
{
[cmdletbinding(SupportsShouldProcess)]
Param
(
$path, $huidige_folder
)
# editing excel file
$Controle_mailbox_vrijdag = 'Nora Remeeus'
$weekcontrole1 = 'Maandag'
$weekcontrole2 = 'Dinsdag'
$partimedag = 'Woensdag'
$dagcontroleur_parttimedag = 'Victor Wong'
$weekcontrole_persoon = 'Nick Siegert'
$afwezig_mailboxcontrole = 'Vrijdag'
$Workbook = $excel.Workbooks.open($path)
$Worksheet = $Workbook.WorkSheets.item('Uit te voeren werkzaamheden')
$worksheet.activate()
$workbook.ActiveSheet.Cells.Item(3,3) = Date
if ($dag -eq $partimedag)
{
$workbook.ActiveSheet.Cells.Item(9,3) = $dagcontroleur_parttimedag
$workbook.ActiveSheet.Cells.Item(10,3) = $dagcontroleur_parttimedag
$workbook.ActiveSheet.Cells.Item(12,3) = $dagcontroleur_parttimedag
}
if (($dag -eq $weekcontrole1) -or ($dag -eq $weekcontrole2))
{$workbook.ActiveSheet.Cells.Item(13,3) = $weekcontrole_persoon}
if ($dag -eq $afwezig_mailboxcontrole)
{$workbook.ActiveSheet.Cells.Item(11,3) = $Controle_mailbox_vrijdag}
$workbook.SaveAs("$huidige_folder\$jaar\$folder_maand\Dagelijks\$datum_vandaag\$Dagelijkse_controle $datum_vandaag")
}
Foreach ($i in $path_dagelijkse_controle)
{
Dagcontrole_folders_maken $i
Foreach ($a in $list_excels)
{Aanpassen_excel_dagcontrole $a $i}
}
# Clean-Up
$Excel.Quit()
Remove-Variable -Name excel
[gc]::collect()
[gc]::WaitForPendingFinalizers()
Внесение этого изменения должно избавить вас от беспокойства здесь ...
Я получаю ошибки в следующей части: $ workbook.SaveAs ("$ huidige_folder $ date_today "). Сообщая, что у него нет доступа к файлу.
... поскольку это указывает, файл все еще используется. Вы всегда должны проверять открытие / закрытие файла перед следующей обработкой. Поскольку скорость обработки ОС и приложений влияет на доступность. А также проверьте наличие папки или файлов, прежде чем пытаться их использовать.
Итак, измените свой код, чтобы включить обработку ошибок, то есть, если / то, попробуйте / поймать, test-Path и т. Д. c.
Простой пример проверки:
# File in use check
$ExcelFilePath = 'D:\Temp\FileData.xlsx'
try {[IO.File]::OpenWrite($ExcelFilePath).close()}
catch {Write-Warning -Message "$ExcelFilePath is in use by another process"}
# Results
<#
WARNING: D:\Temp\FileData.xlsx is in use by another process
#>