PowerShell - Excel
|
Пользователь Сообщения: 102 |
Суть:
скрипт часть логов отписывает в ексель. все отрабатывает корректно, но в диспетчере задач всегда висит один процесс EXCEL.EXE, который не уходит доже после закрытия скрипта. Вопрос: Каким образом корректно это исправить. напрягает ![]() сам скрипт
# Разрешаем выполнение скрипта Set-ExecutionPolicy remotesigned #-->Описываем все переменные блока # пути: $PathPrefix = "D:\test" #$PathPrefix = "\\serv\Otdely\ZUR\ГКН" # повторяющийся элемент пути $PathIn = "$PathPrefix" # каталог, откуда брать ZIP файлы $PathOut = "$PathPrefix" # каталог, куда помещаем результат работы скрипта $PathBase = "$PathPrefix\base" # каталог, где расположены файлы базы # задаем дату и время: $d=get-date -uformat "%Y-%m-%d" $t=get-date -uformat "%H:%M" # имя пользователя: (а надо ли?) $UserName = "$env:username" $ErrorSleep = 5 $NoError = "нет" # количество срабатываний $activation=0 $watcher_start_d = get-date -uformat "%Y-%m-%d" $watcher_start_t = get-date -uformat "%H:%M" #<--Описываем все переменные блока #---#------------------------------------------------------------------------------------------------------- #-->Функция форматирования строки в екселе function Excel_format_1 { $lineStyle = "microsoft.office.interop.excel.xlLineStyle" -as [type] $colorIndex = "microsoft.office.interop.excel.xlColorIndex" -as [type] #---по центру, рамка, выделить жирным $selection.Interior.ColorIndex = 40 $selection.VerticalAlignment = -4108 #по центру $selection.HorizontalAlignment = -4108 #по центру # Выделяем таблицу (рамка) $selection.borders.LineStyle = $lineStyle::xlContinuous $selection.borders.ColorIndex = $colorIndex::xlColorIndexAutomatic # Разукрашиваем $selection.Font.Size = 12 $selection.Font.ColorIndex = 55 $selection.Font.Color = 8210719 # Выделяем жирным $selection.Font.Bold = $true # Ровняем ширину столбцов $UsedRange = $ws.UsedRange $UsedRange.EntireColumn.AutoFit() | Out-Null } function Excel_format_2 { $lineStyle = "microsoft.office.interop.excel.xlLineStyle" -as [type] $colorIndex = "microsoft.office.interop.excel.xlColorIndex" -as [type] #---по центру, по лево $selection.VerticalAlignment = -4108 #по центру $selection.HorizontalAlignment = -4131 #по лево # Ровняем ширину столбцов $UsedRange = $ws.UsedRange $UsedRange.EntireColumn.AutoFit() | Out-Null } #--<Функция форматирования строки в екселе #-->Функция лога перемещений function moves_log { $ex = new-object -com Excel.Application $wb = $ex.Workbooks.Open("$PathOut\moves_log.xlsx") $ws = $wb.Worksheets.Item(1) $Row = $ws.Range("A65536").End(-4162).Row + 1 # Заполняем $ws.Cells.Item($Row,1) = $d $ws.Cells.Item($Row,2) = $t $ws.Cells.Item($Row,3) = $FileZipCurrent.name $ws.Cells.Item($Row,4) = $FileXmlCurrent.name $ws.Cells.Item($Row,5) = $DocTypeRus $ws.Cells.Item($Row,6) = $CadastralNumber $ws.Cells.Item($Row,7) = $DateCreateDoc $ws.Cells.Item($Row,8) = "->" $ws.Cells.Item($Row,9) = "`=ГИПЕРССЫЛКА(`"$OutPath`";`"$OutPath`")" $ws.Cells.Item($Row,10) = $OutName # Оформляем $selection = $ws.Range(("A{0}" -f $Row),("J{0}" -f $Row)) #$selection.Select() | Out-Null Excel_format_2 # закрываем $selection = $null $wb.Save() $wb.Close($false) $ex.Quit() $excel = $null } #--<Функция лога перемещений #-->Функция лога ошибок function error_log { $ex = new-object -com Excel.Application $wb = $ex.Workbooks.Open("$PathOut\moves_log.xlsx") $ws = $wb.Worksheets.Item(2) $Row = $ws.Range("A65536").End(-4162).Row + 1 # Заполняем $ws.Cells.Item($Row,1) = $d $ws.Cells.Item($Row,2) = $t $ws.Cells.Item($Row,3) = $FileXmlCurrent.name $ws.Cells.Item($Row,4) = $ErrorText $ws.Cells.Item($Row,5) = $ErrorHelp # Оформляем $selection = $ws.Range(("A{0}" -f $Row),("E{0}" -f $Row)) #$selection.Select() | Out-Null Excel_format_2 # закрываем $selection = $null $wb.Save() $wb.Close($false) $ex.Quit() $excel = $null } #--<Функция лога ошибок #-->Функция формирования пути и имени файла function Out_PathAndName ($CadastralNumber) { # разбить кадастровый номер на подстроки по ":" в итоге имеем следующие переменные: $Cad_Region = $CadastralNumber.split(":")[0] $Cad_Rayion = $CadastralNumber.split(":")[1] $Cad_Kvartal = $CadastralNumber.split(":")[2] $Cad_Uchastok = $CadastralNumber.split(":")[3] # выровняем значение участка до 4 знаков Switch ($Cad_Uchastok.length) { 1 {$Cad_Uchastok = "000$Cad_Uchastok"} 2 {$Cad_Uchastok = "00$Cad_Uchastok"} 3 {$Cad_Uchastok = "0$Cad_Uchastok"} } if ($Cad_Region -eq $null) { $ErrorCode = "04-01" $ErrorText = "не удалось определить регион ($Cad_Region)" $ErrorHelp = 'вообще то такой ошибки быть не должно' #error_log ($d, $t, $FileXmlCurrent.name, $ErrorText, $ErrorHelp) } # загрузим регионы в массив: if (test-path "$PathBase\regions.txt") { $BaseRegions = Get-Content "$PathBase\regions.txt" | %{ConvertFrom-StringData -StringData $_} $Region = $BaseRegions[$Cad_Region]."r$Cad_Region" # регион Русскми буквами $Region (значение [строки] после "rРЕГИОН=") } else { $ErrorCode = "04-02" $ErrorText = "отсутствует перечень регионов" $ErrorHelp = "поместите файл regions.txt в каталог $PathPrefix\base" #error_log ($d, $t, $FileXmlCurrent.name, $ErrorText, $ErrorHelp) } # загрузим районы в массив: if (test-path "$PathBase\$Cad_Region`_rayion.txt") { $BaseRayions = Get-Content "$PathBase\$Cad_Region`_rayion.txt" | %{ConvertFrom-StringData -StringData $_} $Rayion = $BaseRayions[$Cad_Rayion]."r$Cad_Rayion" # район Русскми буквами $Rayion # каталог и имя файла-результата: $OutPath = "$PathOut\$Cad_Region $Region\$Cad_Region-$Cad_Rayion $Rayion\$Cad_Region-$Cad_Rayion-$Cad_Kvartal" if ($Cad_Uchastok -ne $null) { $OutName = "$DocTypeRus на $Cad_Region`-$Cad_Rayion`-$Cad_Kvartal`-$Cad_Uchastok от $DateCreateDoc`.xml" }else{ $OutName = "$DocTypeRus на $Cad_Region`-$Cad_Rayion`-$Cad_Kvartal от $DateCreateDoc`.xml" } } else { $ErrorCode = "04-03" $ErrorText = "отсутствует перечень районов по $Cad_Region региону ($Region)" $ErrorHelp = "поместите файл $Cad_Region`_rayion.txt в каталог $PathPrefix\base" #error_log ($d, $t, $FileXmlCurrent.name, $ErrorText, $ErrorHelp) } #на выходе: $ErrorCode $ErrorText $ErrorHelp $Cad_Region $Cad_Rayion $Cad_Kvartal $Cad_Uchastok $Region $Rayion $OutPath $OutName } #--<Функция формирования пути и имени файла #---#------------------------------------------------------------------------------------------------------- #-->Если таблицы нет, создаем if (!(test-path "$PathOut\moves_log.xlsx")) { #-->Первый лист $ex = New-Object -Com Excel.Application $wb = $ex.Workbooks.Add() $ws = $wb.Worksheets.Item(1) $ws.Name = 'ОТЧЕТ' $Row=1 # Заполняем $ws.Cells.Item($Row,1) = "дата" $ws.Cells.Item($Row,2) = "время" $ws.Cells.Item($Row,3) = "имя архива" $ws.Cells.Item($Row,4) = "имя файла" $ws.Cells.Item($Row,5) = "тип документа" $ws.Cells.Item($Row,6) = "кадастровый номер" $ws.Cells.Item($Row,7) = "актуальность" $ws.Cells.Item($Row,8) = "->" $ws.Cells.Item($Row,9) = "новое хранилище" $ws.Cells.Item($Row,10) = "новое имя" # Оформляем $selection = $ws.Range(("A{0}" -f $Row),("J{0}" -f $Row)) #$selection.Select() | Out-Null Excel_format_1 #-->Второй лист $ws = $wb.Worksheets.Item(2) $ws.Name = 'ОШИБКИ' $Row=1 # Заполняем $ws.Cells.Item($Row,1) = "дата" $ws.Cells.Item($Row,2) = "время" $ws.Cells.Item($Row,3) = "имя файла" $ws.Cells.Item($Row,4) = "текст ошибки" $ws.Cells.Item($Row,5) = "причина" # Оформляем $selection = $ws.Range(("A{0}" -f $Row),("E{0}" -f $Row)) #$selection.Select() | Out-Null Excel_format_1 $selection = $null $wb.SaveAs("$PathOut\moves_log.xlsx") $wb.Close($false) $ex.Quit() $excel = $null } #--<Если таблицы нет, создаем #---#------------------------------------------------------------------------------------------------------- #-->Наблюдатель за папкой. при появлении файла, обрабатывает его: while($TRUE){ Clear-Host Write-Host "наблюдаем за`t$PathIn\" Write-Host "наблюдаем с`t$watcher_start_d $watcher_start_t" Write-Host "срабатываний`t$activation" if ($DocTypeRus -ne $null) { Write-Host "-----------------------------------------" if ($AText1 -ne $null) {Write-Host "$AText1"} if ($AText2 -ne $null) {Write-Host "$AText2"} if ($AText3 -ne $null) {Write-Host "$AText3"} if ($AText4 -ne $null) {Write-Host "$AText4"} if ($AText5 -ne $null) {Write-Host "$AText5"} Write-Host "-----------------------------------------" } Remove-Variable FilesZip,FilesXml -ErrorAction SilentlyContinue $FilesZip = Get-ChildItem $PathIn\* -Include *.zip $FilesXml = Get-ChildItem $PathIn\* -Include *.xml # шапка $WinTitle=(get-host).UI.RawUI $WinTitle.WindowTitle="XML-ГКН ($activation)" if (($FilesZip -eq $null) -and ($FilesXml -eq $null)) { start-sleep 10 # задержка перед следующим проходом continue } else { #--> старт основному файлу Clear-Host #-->Обработка архивов if ($FilesZip -ne $null) { Remove-Variable FileZipCurrent_count,FilesZip_count -ErrorAction SilentlyContinue ForEach ($FileZipCurrent in $FilesZip) { #каждое значение $FilesZip делаем с $FileZipCurrent: if ($FilesZip.count -ge "2") { #проверка на пустое значение (если 1 файл, то не записывается) $FilesZip_count = $FilesZip.count } else { $FilesZip_count = 1 } $FileZipCurrent_count++ #--> # извлекаем из архива: $PathZip="$PathIn\" [string]$zipfilename = $FileZipCurrent [string]$destination = $PathZip if(test-path($FileZipCurrent)) { $shellApplication = new-object -com shell.application $zipPackage = $shellApplication.NameSpace($zipfilename) $destinationFolder = $shellApplication.NameSpace($destination) $destinationFolder.CopyHere($zipPackage.Items()) } # удаляем архив: Remove-Item "$FileZipCurrent" }#<--Обработка zip } else { # не найдены zip Write-Host "не найдены zip-архивы. ищем xml..." -ForegroundColor Yellow start-sleep 1 #--> # Обработка xml $FilesXml = Get-ChildItem $PathIn\* -Include *.xml if ($FilesXml -ne $null) { Remove-Variable FileXmlCurrent_count,FilesXml_count -ErrorAction SilentlyContinue ForEach ($FileXmlCurrent in $FilesXml) { # каждое значение $FilesXml делаем с $FileXmlCurrent: Remove-Variable ErrorCode,ErrorText,ErrorHelp -ErrorAction SilentlyContinue Remove-Variable info,DocNumber,DateCreateDoc,CadastralNumber,Cad_Region,Cad_Rayion,Cad_Kvartal,Cad_Uchastok,Region,Rayion -ErrorAction SilentlyContinue Remove-Variable DocTypeRus,DocType,DocVers,OutPath,OutName -ErrorAction SilentlyContinue if ($FilesXml.count -ge "2") { # Проверка на пустое значение (если 1 файл, то не записывается) $FilesXml_count = $FilesXml.count } else { $FilesXml_count = 1 } $FileXmlCurrent_count++ Clear-Host Write-Host "обрабатываем zip файл: $FileZipCurrent_count из $FilesZip_count `t($($FileZipCurrent.name))" Write-Host "обрабатываем xml файл: $FileXmlCurrent_count из $FilesXml_count `t($($FileXmlCurrent.name))" Write-Host "-------------------------------------------------------------------------------" #--> #---Основоное действо---# $oXmlDocument = New-Object -TypeName System.Xml.XmlDocument # создаем новый объект как xml $oXmlDocument.load($FileXmlCurrent) # загружаем текущий файл в переменную обработки $DocType = $oXmlDocument."xml-stylesheet".split("/")[6] $DocVers = $oXmlDocument."xml-stylesheet".split("/")[7] if ($DocType -ne $null) { # тип документа из второй строки xml Switch ($DocType) { # пройдемся по известным типам документов KPT { # КПТ $DocTypeRus = "КПТ" Write-Host "тип документа:" `t `t $DocTypeRus Switch ($DocVers) { # пройдемся по известным версиям документа (начал с 9, остальные старые) "09" { # https://portal.rosreestr.ru/xsl/GKN/KPT/09/common.xsl Write-Host "версия документа:" `t $DocVers # получаем значения в переменные #-------------------------------------------------------------- $DateCreateDoc = $oXmlDocument.KPT.CertificationDoc.Date $CadastralNumber = $oXmlDocument.KPT.CadastralBlocks.CadastralBlock.CadastralNumber $info=Out_PathAndName ($CadastralNumber) if ($info[0] -ne $null) {$ErrorCode = $info[0]} if ($info[1] -ne $null) {$ErrorText = $info[1]} if ($info[2] -ne $null) {$ErrorHelp = $info[2]} if ($info[3] -ne $null) {$Cad_Region = $info[3]} if ($info[4] -ne $null) {$Cad_Rayion = $info[4]} if ($info[5] -ne $null) {$Cad_Kvartal = $info[5]} if ($info[6] -ne $null) {$Cad_Uchastok = $info[6]} if ($info[7] -ne $null) {$Region = $info[7]} if ($info[8] -ne $null) {$Rayion = $info[8]} if ($info[9] -ne $null) {$OutPath = $info[9]} if ($info[10] -ne $null) {$OutName = $info[10]} } # закончили с 9 версией КПТ Default { # что делать, когда версия КПТ не описана Write-Host "версия документа:" `t $DocVers $ErrorCode = "03-01" $ErrorText = "$DocVers версия $DocTypeRus не может быть обработана" $ErrorHelp = 'вышла новая версия XML-схемы' } # закончили с вариантом, когда версия КПТ не описана } # закончили с проходом по версиям КПТ } # закончили с КПТ Vidimus { # выписка $DocTypeRus = "КВЗУ" Write-Host "тип документа:" `t `t $DocTypeRus Switch ($DocVers) { "06" { # https://portal.rosreestr.ru/xsl/GKN/Vidimus/06/common.xsl Write-Host "версия документа:" `t $DocVers # получаем значения в переменные #-------------------------------------------------------------- $DateCreateDoc = $oXmlDocument.KVZU.CertificationDoc.Date $CadastralNumber = $oXmlDocument.KVZU.Parcels.Parcel.CadastralNumber $info=Out_PathAndName ($CadastralNumber) if ($info[0] -ne $null) {$ErrorCode = $info[0]} if ($info[1] -ne $null) {$ErrorText = $info[1]} if ($info[2] -ne $null) {$ErrorHelp = $info[2]} if ($info[3] -ne $null) {$Cad_Region = $info[3]} if ($info[4] -ne $null) {$Cad_Rayion = $info[4]} if ($info[5] -ne $null) {$Cad_Kvartal = $info[5]} if ($info[6] -ne $null) {$Cad_Uchastok = $info[6]} if ($info[7] -ne $null) {$Region = $info[7]} if ($info[8] -ne $null) {$Rayion = $info[8]} if ($info[9] -ne $null) {$OutPath = $info[9]} if ($info[10] -ne $null) {$OutName = $info[10]} } # закончили с 6 версией КВЗУ Default { # что делать, когда версия КВЗУ не описана Write-Host "версия документа:" `t $DocVers $ErrorCode = "03-01" $ErrorText = "$DocVers версия $DocTypeRus не может быть обработана" $ErrorHelp = 'вышла новая версия XML-схемы' } # закончили с вариантом, когда версия КВЗУ не описана } # закончили с проходом по версиям КВЗУ } # закончили с КВЗУ Vidimus_KP { # кадастровый паспорт $DocTypeRus = "КПЗУ" Write-Host "тип документа:" `t `t $DocTypeRus Switch ($DocVers) { "03" { # https://portal.rosreestr.ru/xsl/GKN/Vidimus_KP/03/common.xsl Write-Host "версия документа:" `t $DocVers $КПЗУ_счетчик++ # получаем значения в переменные #-------------------------------------------------------------- $DateCreateDoc = $oXmlDocument.Region_Cadastr_Vidimus_KP.Package.Certification_Doc.Date $CadastralNumber = $oXmlDocument.Region_Cadastr_Vidimus_KP.Package.Federal.Cadastral_Regions.Cadastral_Region.Cadastral_Districts.Cadastral_District.Cadastral_Blocks.Cadastral_Block.Parcels.Parcel.CadastralNumber $info=Out_PathAndName ($CadastralNumber) if ($info[0] -ne $null) {$ErrorCode = $info[0]} if ($info[1] -ne $null) {$ErrorText = $info[1]} if ($info[2] -ne $null) {$ErrorHelp = $info[2]} if ($info[3] -ne $null) {$Cad_Region = $info[3]} if ($info[4] -ne $null) {$Cad_Rayion = $info[4]} if ($info[5] -ne $null) {$Cad_Kvartal = $info[5]} if ($info[6] -ne $null) {$Cad_Uchastok = $info[6]} if ($info[7] -ne $null) {$Region = $info[7]} if ($info[8] -ne $null) {$Rayion = $info[8]} if ($info[9] -ne $null) {$OutPath = $info[9]} if ($info[10] -ne $null) {$OutName = $info[10]} } # закончили с 3 версией КПЗУ Default { # что делать, когда версия КПЗУ не описана Write-Host "версия документа:" `t $DocVers $ErrorCode = "03-01" $ErrorText = "$DocVers версия $DocTypeRus не может быть обработана" $ErrorHelp = 'вышла новая версия XML-схемы' } # закончили с вариантом, когда версия КПЗУ не описана } # закончили с проходом по версиям КПЗУ } # закончили с КПЗУ Default { # что делать, когда тип документа не описан $ErrorCode = "02-01" $ErrorText = "тип документа $DocType не может быть обработан" $ErrorHelp = 'скорее всего изменилось наименование документа($DocType) в xml' #error_log ($d, $t, $FileXmlCurrent.name, $ErrorText, $ErrorHelp) #rename-item -path "$FileXmlCurrent" -newname "$($FileXmlCurrent.name)`.ОШИБКА" #break } } # закончили с проходом по типам документов } else { # не удалось определить тип документа $ErrorCode = "01-01" $ErrorText = "не удалось определить тип документа" $ErrorHelp = 'в xml вторая строка должна начинаться с <?xml-stylesheet type="text/xsl" href="' #error_log ($d, $t, $FileXmlCurrent.name, $ErrorText, $ErrorHelp) #break } #-->выше обработка xml ниже перемещение # #-->Описываем переменные полученные в результате работы<-----# # # # $FileXmlCurrent обрабатываемый xml файл # # # # $ErrorCode код ошибки # # $ErrorText # # $ErrorHelp # # # # $Cad_Region кадастровый регион цифрами # # $Cad_Rayion кадастровый район цифрами # # $Cad_Kvartal кадастровый квартал цифрами # # $CadastralNumber кадастровый номер цифрами полностью # # # # $Region регион буквами # # $Rayion район буквами # # # # $OutPath сформированный путь # # $OutName сформированное имя # # # #<--Описываем переменные полученные в результате работы-----># # if ($ErrorCode -ne $null) { # если ошибки были Clear-Host Write-Host "-------------------------------------------------------------------------------" -ForegroundColor Yellow Write-Host "в процессе обработки xml возникла ошибка:" -ForegroundColor Yellow Write-Host "-------------------------------------------------------------------------------" -ForegroundColor Yellow Write-Host "Код ошибки:" `t $ErrorCode Write-Host "Текст:" `t`t $ErrorText Write-Host "Действие:" `t $ErrorHelp msg $UserName /TIME:9000 "$ErrorText" start-sleep $ErrorSleep $OutPath="$PathOut\проблемные\$ErrorCode" if (!(test-path "$OutPath\")) { # проверка на существование каталоа, если нет: new-item -path $PathOut -name "проблемные\$ErrorCode" -type directory -force | Out-Null } if (test-path "$OutPath\$($FileXmlCurrent.name)") { # проверка на существование файла в каталоге назначения, если занято: Write-Host "обратите внимание: такой файл уже имеется" -ForegroundColor Yellow Remove-Variable Flag_ReName,NamePlus -ErrorAction SilentlyContinue $NamePlus=1 $OutNamePovtor = $(($FileXmlCurrent.name).Substring(0,($($FileXmlCurrent.name).Length -4))) While ($Flag_ReName -eq $null) { # пока флаг пустой проверяем существование файла и добавляем 1 к NamePlus if (test-path "$OutPath\$OutNamePovtor ($NamePlus)`.xml") { $NamePlus++ } else { $OutName = "$OutNamePovtor ($NamePlus)`.xml" $Flag_ReName=$NamePlus } } } move-item -path "$FileXmlCurrent" -destination "$OutPath\$OutName" if (test-path "$FileXmlCurrent`.sig") { $OutName = "$OutNamePovtor ($NamePlus)`.xml`.sig" move-item -path "$FileXmlCurrent`.sig" -destination "$OutPath\$OutName" } error_log ($d, $t, $FileXmlCurrent.name, $ErrorText, $ErrorHelp) moves_log ($d, $t, $FileZipCurrent.name, $FileXmlCurrent.name, $DocTypeRus, $DateCreateDoc, $OutPath, $OutName) } else { # если ошибок не было $NoError="да" ###############------------------------------------------------------------------------------------# if ($DateCreateDoc -ne $null) {Write-Host "дата формирования:" `t $DateCreateDoc} if ($CadastralNumber -ne $null) {Write-Host "кадастровый номер:" `t $CadastralNumber} if ($Region -ne $null) {Write-Host "регион:" `t `t $Region} if ($Rayion -ne $null) {Write-Host "район:" `t `t `t $Rayion} ###############------------------------------------------------------------------------------------# #-->перемещаем: if (!(test-path "$OutPath")) { # проверка на существование каталога new-item -path $OutPath -type directory -force | Out-Null } if (!(test-path "$OutPath\$OutName")) { # проверка на существование файла в каталоге назначения, если пусто: move-item -path "$FileXmlCurrent" -destination "$OutPath\$OutName" moves_log ($d, $t, $FileZipCurrent.name, $FileXmlCurrent.name, $DocTypeRus, $DateCreateDoc, $OutPath, $OutName) if (test-path "$FileXmlCurrent`.sig") { # проверка на наличие цифровой подписи move-item -path "$FileXmlCurrent`.sig" -destination "$OutPath\$OutName`.sig" } # делаем файлы с координатами и ОСМ if (($DocTypeRus -eq "КПТ") -and ($DocVers -eq "09") -and ($($FileXmlCurrent.Length / 1Mb) -ge 5)) { Write-Host "" Write-Host "делаем файл с координатами" $Sek=((Measure-Command { $FileOutCSV = "$OutPath\Координаты к $DocTypeRus на $Cad_Region`-$Cad_Rayion`-$Cad_Kvartal от $DateCreateDoc`.csv" # заполним заголовок "кадастровый номер;номер точки;X;Y;погрешность" | Out-File -FilePath $FileOutCSV -Encoding 'default' "1;2;3;4;5" | Out-File -Append -FilePath $FileOutCSV -Encoding 'default' $StrokKoordinat=0 $oXmlDocument.KPT.CadastralBlocks.CadastralBlock.Parcels.Parcel |` ForEach-Object -Process { $CadNumUch = $_.CadastralNumber $_.EntitySpatial.SpatialElement.SpelementUnit |` ForEach-Object -Process { if ($_.SuNmb -ne $null) { $StrokKoordinat++ "$CadNumUch;$($_.SuNmb);$($_.Ordinate.X -replace "\.",",");$($_.Ordinate.Y -replace "\.",",");$($_.Ordinate.DeltaGeopoint -replace "\.",",")"` | Out-File -Append -FilePath $FileOutCSV -Encoding 'default' } } } }).TotalSeconds.tostring("F00")) # всего секунд + сколько обработано строк Write-Host "--------------------------" Write-Host "секунд потрачено:" `t $Sek Write-Host "строк обработано:" `t $StrokKoordinat start-sleep $ErrorSleep Write-Host "создан файл:" `t `t "Координаты к $DocTypeRus на $Cad_Region`-$Cad_Rayion`-$Cad_Kvartal от $DateCreateDoc`.csv" # делаем файл с ОМС if ($oXmlDocument.KPT.CadastralBlocks.CadastralBlock.OMSPoints.OMSPoint) { Write-Host "" Write-Host "делаем файл с ОМС" $Sek=((Measure-Command { $FileOutCSV = "$OutPath\ОМС к $DocTypeRus на $Cad_Region`-$Cad_Rayion`-$Cad_Kvartal от $DateCreateDoc`.csv" # заполним заголовок "Номер пункта опорной межевой сети на плане;Название и (или) номер, тип пункта опорной межевой сети;Класс опорной межевой сети;X;Y" | Out-File -FilePath $FileOutCSV -Encoding 'default' "1;2;3;4;5" | Out-File -Append -FilePath $FileOutCSV -Encoding 'default' $StrokOMS=0 $oXmlDocument.KPT.CadastralBlocks.CadastralBlock.OMSPoints.OMSPoint |` ForEach-Object -Process { $StrokOMS++ "$($_.PNmb);$($_.PName -replace ";"," ");$($_.PKlass -replace ";"," ");$($_.OrdX -replace "\.",",");$($_.OrdY -replace "\.",",")"` | Out-File -Append -FilePath $FileOutCSV -Encoding 'default' } }).TotalSeconds.tostring("F00")) # всего секунд + сколько обработано строк Write-Host "--------------------------" Write-Host "секунд потрачено:" `t $Sek Write-Host "строк обработано:" `t $StrokOMS Write-Host "создан файл:" `t `t "ОМC к $DocTypeRus на $Cad_Region`-$Cad_Rayion`-$Cad_Kvartal от $DateCreateDoc`.csv" start-sleep $ErrorSleep } } } else { #-->если занято Write-Host "обратите внимание: такой файл уже имеется" -ForegroundColor Yellow if (!(test-path "$PathOut\повторы")) { new-item -path "$PathOut\повторы" -type directory -force | Out-Null } Remove-Variable Flag_ReName,NamePlus -ErrorAction SilentlyContinue $NamePlus=1 $OutNamePovtor = $OutName.Substring(0,($OutName.Length -4)) # срезаем 4 символа с конца While ($Flag_ReName -eq $null) { # пока флаг пустой проверяем существование файла и добавляем 1 к NamePlus if (!(test-path "$PathOut\повторы\$OutNamePovtor ($NamePlus)`.xml")) { $OutPath = "$PathOut\повторы\" $OutName = "$OutNamePovtor ($NamePlus)`.xml" $Flag_ReName=$NamePlus move-item -path "$FileXmlCurrent" -destination "$OutPath\$OutName" moves_log ($d, $t, $FileZipCurrent.name, $FileXmlCurrent.name, $DocTypeRus, $DateCreateDoc, $OutPath, $OutName) if (test-path "$FileXmlCurrent`.sig") { $OutName = "$OutNamePovtor ($NamePlus)`.xml`.sig" move-item -path "$FileXmlCurrent`.sig" -destination "$OutPath\$OutName" } } else { $NamePlus++ } } } # /закончили с перемещением } #--> # сообщение после обработки каждого файла Write-Host "-----------------------------------------" Write-Host "ищем следующий файл..." Write-Host "" start-sleep 2 $activation++ if ($NoError -eq "да") { if ($activation -eq 1) {$AText1 = "$activation`t$DocTypeRus`t$CadastralNumber"} if ($activation -eq 2) {$AText2 = "$activation`t$DocTypeRus`t$CadastralNumber"} if ($activation -eq 3) {$AText3 = "$activation`t$DocTypeRus`t$CadastralNumber"} if ($activation -eq 4) {$AText4 = "$activation`t$DocTypeRus`t$CadastralNumber"} if ($activation -eq 5) {$AText5 = "$activation`t$DocTypeRus`t$CadastralNumber"} if ($activation -gt 5) { $AText1 = $AText2 $AText2 = $AText3 $AText3 = $AText4 $AText4 = $AText5 $AText5 = "$activation`t$DocTypeRus`t$CadastralNumber" } } } # каждое значение $FilesXml делаем с $FileXmlCurrent } else { # не найдены xml Write-Host "не найдены xml-файлы..." -ForegroundColor Yellow start-sleep $ErrorSleep continue } }#<--Обработка xml (если не найдены zip) }#<--Если сработал активатор } #/закончили со срабатыванием на файл в $ZipPath на всякий случай, если кто решиться, скрипт и файлы которые он обрабатывает в архиве |
|
Отправлено: 06:45, 08-04-2015 |
Пользователь Сообщения: 102
|
Профиль | Отправить PM | Цитировать Цитата Kazun:
добавление строк [System.Runtime.Interopservices.Marshal]::ReleaseComObject($ex) [System.Runtime.Interopservices.Marshal]::ReleaseComObject($wb) Remove-Variable ex Remove-Variable wb не дает результат. будте вежливы или проходите мимо. как указано выше проблема в том, что excel com-object не завершает процесс excel пока скрипт не будет завершен корректным образом. Но в моем случае скрипт работает все время без завершения. Это не критичная проблема, я хотел выяснить есть ли возможность дать понять PS, что Excel свое дело сделал и может быть завершен. |
|
Последний раз редактировалось firstarey, 08-04-2015 в 13:03. Отправлено: 12:57, 08-04-2015 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 1259
|
Профиль | Отправить PM | Цитировать Логично, что эти строки должны выполняться после команды $ex.Quit() , а не до.
|
Отправлено: 13:02, 08-04-2015 | #12 |
Пользователь Сообщения: 102
|
Профиль | Отправить PM | Цитировать Цитата Kazun:
|
|
Отправлено: 13:09, 08-04-2015 | #13 |
Пользователь Сообщения: 102
|
Профиль | Отправить PM | Цитировать идея появилась, но с реализацией не получилось:
если добавить кнопку которая отвечает за установку флага выхода из цикла? проблема в том, что форма и скрипт у меня живут отдельной жизнью - как их объединить? Add-Type -assembly System.Windows.Forms while($TRUE){ Clear-Host Write-Host "$i" start-sleep 1 # задержка перед следующим проходом #добавляем функцию которая будет выполняться после нажатия клавиши: $i++ if ($exit -eq 1) { exit } } #создаём форму $main_form = New-Object System.Windows.Forms.Form $main_form.Text ='Видимое название формы' $main_form.Width = 100 $main_form.Height = 100 $main_form.AutoSize = $true #создаём кнопку $button = New-Object System.Windows.Forms.Button $button.Text = 'exit' $button.Location = New-Object System.Drawing.Point(10,5) #При нажатии на кнопку выполняется функция : Click_Button $button.add_Click( {$main_form.Close(); $exit=1} ); $main_form.Controls.Add($button) #отображаем форму $main_form.ShowDialog() |
Отправлено: 09:06, 09-04-2015 | #14 |
Пользователь Сообщения: 114
|
Профиль | Отправить PM | Цитировать Чтобы форма и скрипт "общались" между собой, у них должно быть что-то общее. Обычно это переменные.
Но, по умолчанию, все переменные локальные. Задайте глобальные переменные и всё получится. $global:x -будет видеть и форма, и скрипт. |
Отправлено: 02:38, 21-04-2015 | #15 |
Новый участник Сообщения: 10
|
Профиль | Отправить PM | Цитировать Убрал всплывающий в конце "MsgBox" - Excel стал закрываться в процессах. "Чудный" microsoft.
|
------- Отправлено: 00:47, 11-12-2020 | #16 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
VBA - Помогите написать макрос в Excel, экспорт данных из Excel в Word. | E.v.g | Программирование и базы данных | 7 | 03-05-2018 22:18 | |
2010 - Excel 2010 зависает при открытии файла Excel 2003 | dinzhevatov | Microsoft Office (Word, Excel, Outlook и т.д.) | 9 | 18-06-2013 21:45 | |
2003/XP/2000 - excel таблица из другой excel таблицы | sesves | Microsoft Office (Word, Excel, Outlook и т.д.) | 2 | 16-03-2012 01:24 | |
2010 - [решено] Excel | Команда "поиск решений в Excel Starter" | Алина Мусаева | Microsoft Office (Word, Excel, Outlook и т.д.) | 3 | 29-11-2011 00:41 | |
2007 - Excel | Вычисление времени в Excel | Vowan | Microsoft Office (Word, Excel, Outlook и т.д.) | 1 | 01-02-2010 17:09 |
|