【问题标题】:Extracting data from specific cells for multiple files and display in a table POSH从多个文件的特定单元格中提取数据并显示在表格 POSH 中
【发布时间】:2020-08-28 16:47:42
【问题描述】:

所以我正在尝试编写一个 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:\目录到这里\testfile.xlsx 测试文件.xlsx 是的 苹果 视窗/Linux 在此处添加信息

Application Creator Parent AddIndent Areas Borders Cells Column Columns ColumnWidth


【问题讨论】:

    标签: excel powershell


    【解决方案1】:

    这些命令能否帮助您完成任务。

    $DirectoryPath = 'C:\Temp\YourFiles'
    
    foreach ($File in (Get-ChildItem -Path $DirectoryPath))
    {
        #Do your work
        $File.FullName
        $File.Name
        $value | Format-Table -AutoSize
    }
    

    希望我理解你的正确。
    您的目标是将输出打印到 powershell 控制台吗?
    正如我从你的脚本中看到的那样,你得到了你正在寻找的值。
    您可以创建一个 hastable 来收集所有值,然后将其作为对象打印到控制台。所以你应该得到一张“漂亮”的桌子。

    [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
    

    查看结合您的代码 sn-p 的示例。如果某些东西不起作用,请添加您的代码和错误。

    $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
    

    【讨论】:

    • 我收到一条错误消息,提示无法找到该文件,但它存在吗?数据也进不了表?
    • $DirectoryPath = 'V:\Example Directory\' foreach ($File in (Get-ChildItem -Path $DirectoryPath)) { #Do your work $workbook = $excel.Workbooks.Open($文件) $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 |格式表 -AutoSize }
    • 请将代码添加到您的初始帖子中......但我看到了一件事:$excel.Workbooks.Open($File)
    • 抱歉第一次发帖!脚本现在正在运行,但是输出没有添加到表中,它只是打印输出,然后是一些空列,然后移动到下一个。完成后,它会显示一个空表。
    • 已添加代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-26
    • 2021-11-27
    • 1970-01-01
    • 1970-01-01
    • 2018-11-12
    • 2011-08-28
    • 1970-01-01
    相关资源
    最近更新 更多