PowerShell - [решено] csv to xls, xlsx

Ответить
Аватара пользователя
firstarey

PowerShell - [решено] csv to xls, xlsx

Сообщение firstarey »

есть скрипт который ведет лог в csv-файл

хотелось бы реализовать это с полноценным форматированием.



вижу 2 варианта:



1. так и вести лог в csv и конвертировать в xls/xlsx

2. сразу вести лог в xls





всего 9 столбцов



Код:

Код: Выделить всё

$Sheet.Cells.Item(1,1) = “дата”
$Sheet.Cells.Item(1,2) = “время”
$Sheet.Cells.Item(1,3) = “номер документа”
$Sheet.Cells.Item(1,4) = “тип документа”
$Sheet.Cells.Item(1,5) = “кадастровый номер”
$Sheet.Cells.Item(1,6) = “актуальность”
$Sheet.Cells.Item(1,7) = “исходный файл”
$Sheet.Cells.Item(1,8) = “->”
$Sheet.Cells.Item(1,9) = “результат файл”

если использовать 2-й вариант, то каким образом реализовать дописывание файла?

c csv все просто:





Код:

Код: Выделить всё

Add-Content -Path "$RezultatPath\moves_log.csv" -Value $message
с message передаются значения
$Outlog = "$d;$t;$sDocNumber;$DocTypeRus;$sCadastralNumber;$sDateCreateDoc;$($sSourceXmlFile.name);->;"
Аватара пользователя
Kazun

Re: PowerShell - [решено] csv to xls, xlsx

Сообщение Kazun »

Код:

Код: Выделить всё

$ex = new-object -com Excel.Application
$wb = $ex.Workbooks.Open("D:\12.xlsx")
$ws = $wb.Worksheets.Item(1)
$lf = $ws.Range("A65536").End(-4162).Row + 1
$ws.Cells.Item($lf,1) = $d
$ws.Cells.Item($lf,2) = $t
$ws.Cells.Item($lf,3) = $sDocNumber
$ws.Cells.Item($lf,4) = $DocTypeRus
$ws.Cells.Item($lf,5) = $sCadastralNumber
$ws.Cells.Item($lf,6) = $sDateCreateDoc
$ws.Cells.Item($lf,7) = $sSourceXmlFile.name
$ws.Cells.Item($lf,8) = "->"
$ws.Cells.Item($lf,9) = ""
$wb.Save()
$ex.Quit()
Аватара пользователя
firstarey

Re: PowerShell - [решено] csv to xls, xlsx

Сообщение firstarey »

Цитата Kazun:



Код:
PowerShell - [решено] csv to xls, xlsx




не создает сам xlsx файл Изображение

что я делаю не так ?



Скрытый текст

[spoiler]Код:
[/spoiler]

Код: Выделить всё

# создаем функци ведения лога:
function moves_log($message) {
	if (!(test-path "$RezultatPath\moves_log.xlsx")) { # Если таблицы нет
		# Созадём объект Excel
		$ex = New-Object -Com Excel.Application
		# Добавляем рабочую книгу
		$wb = $ex.Workbooks.Add()
		# Начинаем работать с первым листом. Для простоты  обращения к нему создаём соответствующую переменную:
		$ws = $wb.Worksheets.Item(1)
		# Переименовываем лист
		$ws.Name = 'Лог перемещений'
		# Заполняем ячейки - шапку таблицы
		# $Sheet = $Excel.WorkSheets.Item(1)
		$ws.Cells.Item(1,1) = “дата”
		$ws.Cells.Item(1,2) = “время”
		$ws.Cells.Item(1,3) = “номер документа”
		$ws.Cells.Item(1,4) = “тип документа”
		$ws.Cells.Item(1,5) = “кадастровый номер”
		$ws.Cells.Item(1,6) = “актуальность”
		$ws.Cells.Item(1,7) = “исходный файл”
		$ws.Cells.Item(1,8) = “->”
		$ws.Cells.Item(1,9) = “путь”
		$ws.Cells.Item(1,10) = “итоговый файл”
		# Выделяем жирным шапку таблицы
		$ws.Rows.Item(1).Font.Bold = $true
		# Выравниваем для того, чтобы их содержимое корректно отображалось в ячейке
		$UsedRange = $ws.UsedRange
		$UsedRange.EntireColumn.AutoFit() | Out-Null
		# Переходим к не занятой строке
		$lf = $ws.Range("A65536").End(-4162).Row + 1
		# Заполняем
		$ws.Cells.Item($lf,1) = $d
		$ws.Cells.Item($lf,2) = $t
		$ws.Cells.Item($lf,3) = $sDocNumber
		$ws.Cells.Item($lf,4) = $DocTypeRus
		$ws.Cells.Item($lf,5) = $sCadastralNumber
		$ws.Cells.Item($lf,6) = $sDateCreateDoc
		$ws.Cells.Item($lf,7) = $sSourceXmlFile.name
		$ws.Cells.Item($lf,8) = "->"
		$ws.Cells.Item($lf,9) = $RezultatPath
		$ws.Cells.Item($lf,10) = $OutName
		# Выравниваем для того, чтобы их содержимое корректно отображалось в ячейке
		$UsedRange = $ws.UsedRange
		$UsedRange.EntireColumn.AutoFit() | Out-Null
		$wb.Save("$RezultatPath\moves_log.xlsx")
		$ex.Quit()
	} else { # Если таблица уже существует
		# Созадём объект Excel
		$ex = new-object -com Excel.Application
		$wb = $ex.Workbooks.Open("$RezultatPath\moves_log.xlsx")
		# Делаем лист активным
		$ws = $wb.Worksheets.Item(1)
		# Переходим к не занятой строке
		$lf = $ws.Range("A65536").End(-4162).Row + 1
		Write-Host "значения"
		Write-Host "$d,$t,$sDocNumber,$DocTypeRus,$sCadastralNumber,$sDateCreateDoc,$sSourceXmlFile.name),$RezultatPath,$OutName"
		start-sleep 5
		# Заполняем
		$ws.Cells.Item($lf,1) = $d
		$ws.Cells.Item($lf,2) = $t
		$ws.Cells.Item($lf,3) = $sDocNumber
		$ws.Cells.Item($lf,4) = $DocTypeRus
		$ws.Cells.Item($lf,5) = $sCadastralNumber
		$ws.Cells.Item($lf,6) = $sDateCreateDoc
		$ws.Cells.Item($lf,7) = $sSourceXmlFile.name
		$ws.Cells.Item($lf,8) = "->"
		$ws.Cells.Item($lf,9) = $RezultatPath
		$ws.Cells.Item($lf,10) = $OutName
		# Выравниваем для того, чтобы их содержимое корректно отображалось в ячейке
		$UsedRange = $ws.UsedRange
		$UsedRange.EntireColumn.AutoFit() | Out-Null
		$wb.Save()
		$ex.Quit()
	}
}
Аватара пользователя
Kazun

Re: PowerShell - [решено] csv to xls, xlsx

Сообщение Kazun »

$wb.SaveAs("$RezultatPath\moves_log.xlsx")
Ответить

Вернуться в «Скриптовые языки администрирования Windows»