Сравнить название файла с содержимым ячейки в Excel (скопировать файлы, которые совпали, в созданный каталог)
Коллеги, добрый день! Помогите разобраться, стоит задача:
- В подкаталогах среди файлов отобрать только Акты и Счета
$b = Get-ChildItem -Path С:\Акты\ -Force -recurse -Include "*акт*.xlsx", "*счет*"
$b.basename
918100165822036731Акт06_00_24
918100165822036731Счет06_00_24
911008166031330831Акт06_00_24
911008166031330831Счет06_00_24
Требуется преобразовать чтобы имя было только номер, например:
911008166031330831
911005230819506751
- В файле Excel в соответствующих строках находится номер Акта и номер задачи
#75227866 918100165822036731
#75220883 911010667916896739
Написал код для парсинга Excel:
$ExcelObj = New-Object -comobject Excel.Application
$ExcelWorkBook = $ExcelObj.Workbooks.Open("c:\Акт\Акт.xlsx")
$ExcelWorkSheet = $ExcelWorkBook.Sheets.Item("NewItem")
$row = $ExcelWorkSheet.UsedRange.Rows.Count
for($i=2;$i -le $row;$i++)
{
$zadacha = $ExcelWorkSheet.Columns.Item(1).Rows.Item($i).Text
$dogovor = $ExcelWorkSheet.Columns.Item(3).Rows.Item($i).Text
$zadacha
$dogovor
}
Задача следующая:
- Сравнить название файла и результат строки в Excel. Если номера совпадают, то создается каталог с названием задачи, например #75227866 и в него переносятся файлы, которые совпали по условию
Ответы (1 шт):
Автор решения: Алексей Р
→ Ссылка
Комментарии в коде
$root = "c:\test\foo\" # задаем корневой каталог, где лежат файлы
$b = Get-ChildItem -Path "$root" -Force -recurse -Include "*акт*.xlsx", "*счет*"
$ExcelObj = New-Object -comobject Excel.Application
$b | ForEach-Object { # перебираем найденные файлы
if ($_.basename -match "(?<code>^\d+)"){ # вытаскиваем номера из имен файлов
$code = $Matches.code # помещаем номер [договора] из очередного файла в переменную
$ExcelWorkBook = $ExcelObj.Workbooks.Open($_.fullname)
$ExcelWorkSheet = $ExcelWorkBook.Sheets.Item("NewItem")
$row = $ExcelWorkSheet.UsedRange.Rows.Count
for($i=2;$i -le $row;$i++) {
$zadacha = $ExcelWorkSheet.Columns.Item(1).Rows.Item($i).Text
$dogovor = $ExcelWorkSheet.Columns.Item(3).Rows.Item($i).Text
$ExcelWorkBook.Close()>$null # закрываем книгу Excel
if ($dogovor -eq $code){ # номер из имени файла и номер договора с листа совпали?
$folder = "$root\$zadacha" # формируем путь к подкаталогу с номером задачи
New-Item -ItemType Directory -Force -Path "$folder">$null # создаем подкаталог
Copy-Item "$($_.fullname)" -Destination "$folder">$null # копируем в него файл
}
}
}
}
$ExcelObj.Quit()>$null # закрываем Excel