Проблема импорта / экспорта-excel с powershell

#excel #string #powershell #filtering

#excel #строка #powershell #фильтрация

Вопрос:

Итак, все, что я хочу сделать, это импортировать файл Excel, содержащий количество покупок, и выбрать все строки со словами «walmart», «mcdonalds» и «burger king» в нем. Затем экспортируйте результат обратно в файл Excel. Я установил модуль Excel. Я перепробовал огромное количество вещей, но обычно я получаю только jibberish в файле экспорта.

В моем файле Excel есть 4 столбца, столбец «имя» — столбец B. Но столбцы не имеют имен, первая строка — это первая покупка.

Пожалуйста, помогите, спасибо.

РЕДАКТИРОВАТЬ: вот пример (точка с запятой означает следующую ячейку):

  1. ; 1 февраля 2021 года ; купил товары у blabla; -25 $ ; 400 $ (<—total)
  2. ; 5 февраля 2021 ; покупка в MCDONALDS; -10 $ ; 390 $
  3. ; 7 февраля 2021 ; покупка у случайной компании; -30 $ ; 360 $
  4. ; 7 февраля 2021 ; покупка у компании X; -15 $ ; 345 $
  5. ; 9 февраля 2021 ; покупка у BURGERKING; -7 $ ; 338 $

Я хочу избавиться от каждой строки / строки, не содержащей нужных мне слов, например, mcdonalds и burger king, и экспортировать результат в другой файл Excel, чтобы я мог найти сумму этих покупок.

Я понятия не имею, что делать дальше, это моя 4-я неделя изучения powershell, я пробовал что-то вроде

 (import-excel "C:purchases.xlsx") | select-string ".*chinese*.", 
".*burgerking*.", ".*mcdonalds*." | export-excel "C:outfile.xlsx"
 

но это явно неверно.
Я попробую кое-что из того, о чем упоминал пользователь19702, спасибо за помощь.

Редактировать 2: это сработало для фильтрации файла в powershell, но экспорт файла не работает, выходной файл пуст. Вот код и вывод:

 PS C:WindowsSystem32> $purchase = Import-Excel 
"C:UserssondeDesktoppersonlig-prosjekterpengebrukvisakort-3mnd.xlsx" - 
NoHeader | % { if($_ -match "visa") {write-host $_}}

@{P1=02.02.2021 00:00:00; P2=VISA VARE XXXXXXXXXX 01.02  0,00 
GOOGLE*YOUTUBE SUPERINTERNET Kurs; P3=-50; P4=5725,16; P5=; P6=; P7=}

@{P1=02.02.2021 00:00:00; P2=VISA VARE XXXXXXXXXXX 01.02  0,00 GOOGLE 
*YouTube Superg.co/helppay# Kurs; P3=-100; P4=10360,93; P5=; P6=; P7=}

@{P1=01.02.2021 00:00:00; P2=VISA VARE XXXXXXXXX 30.01  0,00 GOOGLE 
*Google Play Apg.co/helppay Kurs; P3=-29; P4=10460,93; P5=; P6=; P7=}
 

Комментарии:

1. Пожалуйста, покажите свой код и, в лучшем случае, несколько очищенных строк примеров данных, чтобы мы могли воспроизвести вашу ситуацию. Имейте в виду, что мы не можем видеть ваш экран, и мы не можем читать ваши мысли. 😉 (Если вы отправляете код или образец данных, отформатируйте их как код, пожалуйста.)

Ответ №1:

Я предполагаю:

  • mcdonalds burger king , и т.д. находятся в первом столбце
  • что существует только один рабочий лист
  • что нет таблиц
  • что весь рабочий лист — это ваши покупки
  • ваши (пустые) имена столбцов находятся в строке # 1

Тогда это должно работать нормально:

 Import-Module importExcel
Import-Excel "C:pathtopurchases.xlsx" -NoHeader -StartRow 2 | 
  where P1 -in ('mcdonalds','burger king','walmart') | 
  Export-Excel "C:pathtopurchases-filtered.xlsx" -StartRow 2 -NoHeader
 
  • -NoHeader указывает Import-Excel создать собственные имена столбцов: P1, P2, P3 и т.д.
  • -StartRow указывает, сколько строк сверху пропустить при чтении или записи.

Примечание: если вы добавите имена столбцов для других столбцов, манипулировать данными будет намного проще