выберите данные из Excel, используя PowerShell - PullRequest
1 голос
/ 23 марта 2020

Я пишу сценарий для выбора указанных c данных из файла .xlsx с помощью PowerShell v7.0.

Рабочая таблица 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'


Альфредс Футтеркисте
Коммерческий центр Moctezuma
Эрнст Гендель
Magazzini Alimentari Riuniti

Спасибо!

1 Ответ

1 голос
/ 23 марта 2020

Вам следует рассмотреть возможность использования специализированных модулей PowerShell для взаимодействия с книгами Excel - например, ImportExcel.

Если это не вариант, и вы должны используйте Интерфейс автоматизации COM в Excel , как в вашем вопросе:

Следующий (легко настраиваемый) код предполагает, что ваша таблица находится на первом листе файла .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).Sheets.Item(1)

 $ws.UsedRange.Rows | 
   where { $_.Cells.Item(1, 3).Value2 -eq 'x' } |
     foreach { $_.Cells.Item(1, 1).Value2 }

 $xl.Quit()

}

Обратите внимание на явные вызовы метода .Item, которые необходимы только в PowerShell [Core] 6+; в Windows PowerShell вы могли бы более кратко написать, например, $_.Cells(1, 3) вместо $_.Cells.Item(1, 3).

См. эту проблему GitHub для справочной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...