使用powershell从excel中选择数据

nvbavucw  于 2023-10-22  发布在  Shell
关注(0)|答案(1)|浏览(106)

我正在编写一个脚本,使用PowerShell v7.0从.xlsx文件中选择特定数据。
Excel工作表包含以下数据:

+------------------------------+------------------+---------+
|           Company            |     Contact      | Country |
+------------------------------+------------------+---------+
| Alfreds Futterkiste          | Maria Anders     | x       |
| Centro comercial Moctezuma   | Francisco Chang  | x       |
| Ernst Handel                 | Roland Mendel    | x       |
| Island Trading               | Helen Bennett    | UK      |
| Laughing Bacchus Winecellars | Yoshi Tannamuri  | Canada  |
| Magazzini Alimentari Riuniti | Giovanni Rovelli | x       |
+------------------------------+------------------+---------+

要获得可以复制并粘贴到Excel工作表中的表格表示,请单击Show code snippet,然后单击Run code snippet

<table>
<thead>
    <tr>
        <th>Company</th>
        <th>Contact</th>
        <th>Country</th>
    </tr>
</thead>
<tbody>
    <tr>
        <td>Alfreds Futterkiste</td>
        <td>Maria Anders</td>
        <td>x</td>
    </tr>
    <tr>
        <td>Centro comercial Moctezuma</td>
        <td>Francisco Chang</td>
        <td>x</td>
    </tr>
    <tr>
        <td>Ernst Handel</td>
        <td>Roland Mendel</td>
        <td>x</td>
    </tr>
    <tr>
        <td>Island Trading</td>
        <td>Helen Bennett</td>
        <td>UK</td>
    </tr>
    <tr>
        <td>Laughing Bacchus Winecellars</td>
        <td>Yoshi Tannamuri</td>
        <td>Canada</td>
    </tr>
    <tr>
        <td>Magazzini Alimentari Riuniti</td>
        <td>Giovanni Rovelli</td>
        <td>x</td>
    </tr>
</tbody>
</table>

我所做的:

$Output = [object][order]@{
                Name = $WorkSheet.Range("C1:C1000").Formula = "=x"
        }
        $Output

预期结果:国家= 'x'的公司列表
[*] Alfreds Futterkiste
蒙特苏马商业中心
恩斯特·亨德尔
Magazzini Alementari Riuniti**
谢谢你,谢谢

hpcdzsge

hpcdzsge1#

您应该考虑使用专门的PowerShell模块来与Excel工作簿进行交互-例如ImportExcel
如果这不是一个选项,你必须使用**Excel's COM Automation Application interface**,就像你的问题一样:
下面的代码(很容易调整)假设您的表位于.xlsx文件的第一个工作表中(并且该工作表不包含任何其他内容)。

# Note: Be sure to specify a *full path*
$xlFile = Convert-Path 'sample.xlsx'

& {

 $xl = New-Object -ComObject Excel.Application

 $ws = $xl.Workbooks.Open($xlFile).Worksheets(1)

 $ws.UsedRange.Rows | 
   Where-Object   { $_.Cells(1, 3).Value2 -eq 'x' } |
   ForEach-Object { $_.Cells(1, 1).Value2 }

 $xl.Quit()

}

注:.Worksheets(1).Worksheets.Item(1)的缩写,.Cells(1, 3).Cells.Item(1, 3)的缩写。在PowerShell (Core)的早期版本中,只支持后一种显式形式,[1]但自(至少)v7.2以来,速记形式也可以工作(它总是在 Window PowerShell 中)。
[1]有关背景信息,请参见GitHub issue #4554

相关问题