Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] csv to xls, xlsx (http://forum.oszone.net/showthread.php?t=296985)

firstarey 16-03-2015 14:03 2483342

csv to xls, xlsx
 
есть скрипт который ведет лог в 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 16-03-2015 14:28 2483351

Код:

$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 17-03-2015 08:12 2483700

Цитата:

Цитата Kazun
Код: »

не создает сам xlsx файл :(
что я делаю не так ?
Скрытый текст
Код:

# создаем функци ведения лога:
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 17-03-2015 08:27 2483705

$wb.SaveAs("$RezultatPath\moves_log.xlsx")


Время: 11:50.

Время: 11:50.
© OSzone.net 2001-