 |
|
скрипт отрабатывает только через PS ISE
Здравствуйте!
скрипт корректно отрабатывает только через PS ISE. При запуске самого скрипта двойным щелчком черное окно PS открывается и тут же закрывается. При запуске через открытое окно - зависает.
при этом другие скрипты отрабатывают как положено.
такая же проблема и у другого скрипта, где есть создание формы выбора файла (хотя раньше на вин xp работало).
проверил на другой машине (терминал вин серв 2008) черное окно ps открывается и висит.
сам же скрипт открывает xml файл и извлекает из него данные и записывает в ексель.
сам скрипт
Код:
<#
.SYNOPSIS
обработка XML росреестра
.DESCRIPTION
читает XML файл росреестра ЕГРН и сохраняет записи о частях в ексель
.NOTES
Автор: Александр Анатольевич
Почта:
Телефон:
#>
param (
# создаем форму для запроса файла
[string]$Title,
[string]$Directory,
[string]$Filter="All Files (*.xml)|*.xml"
)
[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") | Out-Null
$objForm = New-Object System.Windows.Forms.OpenFileDialog
$objForm.InitialDirectory = $Directory
$objForm.Filter = $Filter
$objForm.Title = $Title
$Show = $objForm.ShowDialog()
If ($Show -eq "OK"){
$path=$objForm.FileName
} Else {
read-host "Файл не выбран. выход."
start-sleep 8
break
}
# создаем новый объект как xml
$oXmlDocument = New-Object -TypeName System.Xml.XmlDocument
# загружаем текущий файл в переменную обработки
$oXmlDocument.load($path)
$OutNameXlsx=$path -Replace "xml","xlsx"
#---#-------------------------------------------------------------------------------------------------------
#-->Функция оформления строки в екселе
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
}
#--<Функция оформления строки в екселе
#---#-------------------------------------------------------------------------------------------------------
#href="https://portal.rosreestr.ru/xsl/EGRP/Reestr_Extract_Big/ZU/07/Common.xsl"
if (!($oXmlDocument."xml-stylesheet".split("/")[6] -eq "Reestr_Extract_Big")) {
Read-Host "Схема файла не соответствует Reestr_Extract_Big"
break
} else {
Write-Host "Созаем таблицу координат.."
#-->Создаем эксель-файл, форматируем
#-->Первый лист
$ex = New-Object -Com Excel.Application
#-----------------$ex.visible = $true
#-----------------$ex.DisplayAlerts = $False
$wb = $ex.Workbooks.Add()
$ws = $wb.Worksheets.Add()
$ws = $wb.Worksheets.Item(1)
# получить листы
$s1 = $wb.worksheets | where {$_.name -eq "лист1"}
$s1.activate()
$s1.Name = 'Учетный номер части'
$Row=1
# Заполняем ячейки - шапку таблицы
$s1.Cells.Item($Row,1) = "Учетный номер части"
$s1.Cells.Item($Row,2) = "Учетный номер части и номер"
# Оформляем
$selection = $s1.Range(("A{0}" -f $Row),("B{0}" -f $Row))
Excel_format_1
# Ровняем ширину столбцов
$UsedRange = $s1.UsedRange
$UsedRange.EntireColumn.AutoFit() | Out-Null
$selection = $null
$wb.SaveAs("$OutNameXlsx")
Write-Host "таблица создана"
Write-Host "заполняем таблицу.."
start-sleep -s 2
#<--Таблица создана
#-->Заполнение 1 листа ()
$Row = $s1.Range("A65536").End(-4162).Row + 1
$CadastralNumber = $oXmlDocument.KVZU.Parcels.Parcel.CadastralNumber
#-->Прогресс-бар
$КоличествоЧастей = 0
foreach ($item in $oXmlDocument.KVZU.Parcels.Parcel.SubParcels.SubParcel) {
$КоличествоЧастей++
}
$percent=$КоличествоЧастей/100
$c = 0
Write-Host "Будет обработано $КоличествоЧастей записей"
#<--Прогресс-бар
$oXmlDocument.KVZU.Parcels.Parcel.SubParcels.SubParcel |`
ForEach-Object -Process {
#-->Прогресс-бар
$c++;[int]$a = $c/$percent
Write-Progress -Activity "Идет обработка…"`
-PercentComplete $a -CurrentOperation "$a% завершено" `
-Status "Пожалуйста подождите"
#<--Прогресс-бар
# Заполняем
$s1.Cells.Item($Row,1) = $_.NumberRecord
#$Detailedname = $User.LastName + " " + $User.FirstName + " " + $User.MiddleName
$s1.Cells.Item($Row,2) = $CadastralNumber + "/" + $_.NumberRecord
$Row++
}
Write-Progress -Activity "Идет обработка…" `
-Completed `
-Status "готово"
# Оформляем
$selection = $s1.Range(("A{0}" -f $Row),("F{0}" -f $Row))
Excel_format_2
# Ровняем ширину столбцов
$UsedRange = $s1.UsedRange
$UsedRange.EntireColumn.AutoFit() | Out-Null
$selection = $null
$wb.Save()
Write-Host "таблица координат заполнена"
start-sleep -s 2
$wb.Close($true)
$ex.Quit()
Write-Host "Готово!"
start-sleep -s 8
}#<--доп инфа из ЕГРН
|
так и не понял в чем проблема. обновил PS до 5-й версии и все работает (была 2, хотя ранее на ней работало)
|
Время: 10:58.
© OSzone.net 2001-