Извлечение данных из определенных ячеек для нескольких файлов и отображение в таблице POSH - PullRequest
0 голосов
/ 14 октября 2019

Итак, я пытаюсь написать сценарий PowerShell для циклического просмотра файлов Excel в каталоге, файлы которого имеют разные имена. Я пытаюсь, чтобы скрипт смотрел в файле на определенные ячейки и выводил их в окне PowerShell в виде таблицы. Мне также нужен скрипт, чтобы получить имя файла, например

Name           Column1            Column2           Column3
file1.xlsx     Yes                linux             extra info
file2.xlsx     no                 windows           more info

Я пытался использовать $value = $workbook.Item(2, 4), и это работает, но я не знаю, как выполнить цикл между файлами, отформатировать в таблицуи извлеките имя файла.

Редактировать:

$DirectoryPath = 'V:\directory goes here\

foreach ($File in (Get-ChildItem -Path $DirectoryPath))
{
#Do your work
$workbook = $excel.Workbooks.Open($File.FullName)
$workbook.sheets.item(1).activate()
$WorkbookTotal=$workbook.Worksheets.item(3)
$InternetFacingAnswer = $WorkbookTotal.Cells.Item(2, 4)
$OS = $WorkbookTotal.Cells.Item(4, 3)
$Guidance = $WorkbookTotal.Cells.Item(4,7)

$File.FullName
$File.Name
$InternetFacingAnswer.Text
$OS.Text
$Guidance.Text
$value | Format-Table -AutoSize
}

Текущий вывод, который я получаю: V: \ directory идет сюда \ testfile.xlsx testfile.xlsx ДА Яблоки Windows / Linux addinfo здесь

Создатель приложения Родительские области AddIndent Границы Ячейки Столбцы ColumnWidth


1 Ответ

1 голос
/ 14 октября 2019

Могут ли эти команды помочь вам в вашей задаче.

$DirectoryPath = 'C:\Temp\YourFiles'

foreach ($File in (Get-ChildItem -Path $DirectoryPath))
{
    #Do your work
    $File.FullName
    $File.Name
    $value | Format-Table -AutoSize
}

Надеюсь, я вас правильно понял.
Ваша цель - напечатать вывод на консоль powershell, верно?
Как я вижуиз вашего скрипта вы получите значения, которые вы ищете.
Вы можете создать таблицу, в которой собраны все значения, а затем распечатать это как объект на консоли. Таким образом, вы должны получить «хорошую» таблицу.

[PSCustomObject[]]$Output = @() #Before foreach-loop

[System.Collections.Hashtable]$Hashtable = @{ #Inside foreach-loop
    Name = $File.Name
    Column1 = $InternetFacingAnswer.Text
    Column2 = $OS.Text
    Column3 = $Guidance.Text
}

$Output += New-Object -TypeName 'PSCustomObject' -Property $Hashtable



$Output  | Select-Object -Property Name, Column1, Column2, Column3 | Format-Table -AutoSize #After foreach-loop

См. Пример вместе с вашим фрагментом кода. Пожалуйста, добавьте также ваш код и ошибки, если что-то не работает.

$DirectoryPath = 'V:\directory goes here\'

[PSCustomObject[]]$Output = @() #Before foreach-loop

foreach ($File in (Get-ChildItem -Path $DirectoryPath))
{
    #Do your work
    $workbook = $excel.Workbooks.Open($File.FullName)
    $workbook.sheets.item(1).activate()
    $WorkbookTotal=$workbook.Worksheets.item(3)
    $InternetFacingAnswer = $WorkbookTotal.Cells.Item(2, 4)
    $OS = $WorkbookTotal.Cells.Item(4, 3)
    $Guidance = $WorkbookTotal.Cells.Item(4,7)


    [System.Collections.Hashtable]$Hashtable = @{ #Inside foreach-loop
        Name = $File.Name
        Column1 = $InternetFacingAnswer.Text
        Column2 = $OS.Text
        Column3 = $Guidance.Text
    }

    $Output += New-Object -TypeName 'PSCustomObject' -Property $Hashtable

}

$Output  | Select-Object -Property Name, Column1, Column2, Column3 | Format-Table -AutoSize #After foreach-loop
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...