【发布时间】:2021-12-22 01:26:24
【问题描述】:
我有一个 powershell 脚本,它循环遍历 excel 文件的所有工作表,以将列从一个工作表复制到另一个文件中具有相同名称的另一个工作表。它运行良好,但我希望它只循环通过源文件中的可见工作表。我怎样才能修改脚本来完成这个?
Param(
$Source = “Source.xlsm”,
$range1 = “A1:EZ1”,
$Output = “Output.xlsx”
) #end param
$Excel = New-Object -ComObject excel.application
$Excel.visible = $false
$Workbook = $excel.Workbooks.open($Source)
$WorkbookOutput = $excel.Workbooks.open($Output)
$Excel.displayAlerts = $false # don't prompt the user
$i = 1
foreach ($sheet in $workbook.Worksheets)
{
$Worksheet = $Workbook.WorkSheets.item($i)
$worksheet.activate()
$wksname = $worksheet.name
Write-Output $wksname
$range = $WorkSheet.Range($range1).EntireColumn
$range.Copy() | out-null
#$Excel.displayAlerts = $false # don't prompt the user
$WorksheetOutput = $WorkbookOutput.WorkSheets.item($wksname)
$worksheetOutput.activate()
#$Range = $Worksheet.Range($range2)
$WorksheetOutput.Range("A1:EZ1").PasteSpecial(-4163)
$i++
Write-Output $i
}
$workbook.Save()
$Excel.Quit()
感谢您的帮助!
亲切的问候,
Smid
【问题讨论】:
-
foreach ($sheet in ($workbook.Worksheets | Where-Object { $_.Visible -eq -1 })) {..}见XlSheetVisibility -
这就像一个魅力。谢谢@Theo!
-
感谢您告诉我。但是,作为 SO 新手,您可能不知道这一点,但习惯上单击左侧的 ✓ 图标 accept the answer that best solved your problem。这将帮助其他有类似问题的人更轻松地找到它,并有助于激发人们回答您的问题。
标签: excel powershell