Как скопировать имя файла книги Excel в ячейку с помощью PowerShell?

#excel #powershell

Вопрос:

Используя PowerShell, я хотел бы открыть книгу Excel, скопировать имя книги, а затем вставить это имя в ячейку (G6) на одном из листов (Jpl) в этой книге. Сохранить и закрыть.

 $Files=Get-ChildItem -Path "D:MyExcelfilesGR-E"
$xl = new-object -c excel.application
$xl.visible=$False
$xl.displayalerts = $False

foreach($File in $Files){
 
$baseName = [System.IO.Path]::GetFileNameWithoutExtension($file.fullname)
Write-Host $baseName
$wb1 = $xl.workbooks.open($file, $null, $true)
$worksheet = $wb1.sheets.item("Jpl")
$bookname = $wb1.Range("G6")
$bookname.PasteSpecial(-4163)
$wb1.Save()
$wb1.Close()
 
}
$xl.Quit()
 

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

1. Поэтому, пожалуйста, расскажите нам, что не работает с вашим решением. Какие-нибудь сообщения об ошибках? Пожалуйста, добавьте их полностью к вашему вопросу. Кстати, знаете ли вы, что PowerShell добавляет очень удобное свойство к объектам FileInfo Get-ChildItem , возвращаемым вызываемым BaseName ?

Ответ №1:

Это должно помочь. Смотрите комментарии в коде для объяснения.

 #Added the -File switch since you only want files.
#also added a filter for only excel files
$Files=Get-ChildItem -Path "G:TestExcel" -File -Filter "*.xls?"

$xl = new-object -c excel.application
$xl.visible=$False
$xl.displayalerts = $False

foreach($File in $Files) {
 
  Write-Host $File.baseName

  #Open file using fully qualified Path
  $wb1 = $xl.workbooks.open($file.FullName)

  $worksheet = $wb1.sheets("Jpl")

  #Couldn't get Range method to work switched to Cells
  $Worksheet.Cells(6,"G") = $File.BaseName

  $wb1.Save()
  $wb1.Close()
 
}

$xl.Quit()
 

Вывод на консоль с использованием 2 тестовых файлов:

 JPLTest-1
JPLTest-A
 

Один из файлов:

введите описание изображения здесь

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

1. Спасибо за помощь, РГ. Отлично сработало!

2. ИМат, рад быть полезным, сохраняет остроту ума.