#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. ИМат, рад быть полезным, сохраняет остроту ума.