簡體   English   中英

如何將Excel工作簿合並到一個工作簿中並命名工作表

[英]How to Combine Excel Workbooks into One Workbook and Name the Worksheets

我正在嘗試將多個Excel工作簿合並到一個工作簿中,同時將工作表命名為復制的工作簿的文件名。

我試過在for循環和外部移動$ Worksheet.Name。 它仍然只為新工作簿中的空工作表指定一個名稱 - 將其命名為復制的最后一個文件。

$ExcelObject=New-Object -ComObject excel.application
$ExcelObject.visible=$true
$ExcelFiles=Get-ChildItem -Path C:\Users\u1\Documents\Testing

$Workbook=$ExcelObject.Workbooks.add()
$Worksheet=$Workbook.Sheets.Item("Sheet1")

foreach($ExcelFile in $ExcelFiles){

$Everyexcel=$ExcelObject.Workbooks.Open($ExcelFile.FullName)
$Everysheet=$Everyexcel.sheets.item(1)
$Everysheet.Copy($Worksheet)
$Worksheet.Name = [io.path]::GetFileNameWithoutExtension($ExcelFile) 
$Everyexcel.Close()
}

$Workbook.SaveAs("C:\Users\u1\Documents\Testing\New\merged.xlsx")
$ExcelObject.Quit()

創建了新工作簿(merged.xlsx),但工作表全部命名為Sheet1(...),但一個空工作表被命名為目錄中的最后一個文件。 我也得到以下錯誤。 Excel無法訪問“新建”。 該文檔可以是只讀的或加密的。 您無法在空值表達式上調用方法。

您遇到的問題是$Everysheet.Copy($Worksheet)調用正在復制$Everysheet的值和工作表名稱並將其放在$Worksheet之前。 您可以在此處查看Copy方法的文檔。

我不確定如何跟蹤單個工作簿的工作表名稱以重命名它們,但我強烈建議將ImportExcel模塊用於任何與Excel相關的文件。 它使它們更容易使用,只需幾秒鍾就可以使它工作。 此外,它還具有使用讀取和編輯Excel文件而無需安裝Microsoft Excel的好處。

您可以通過幾行完成您想要完成的任務:

$exportExcelPath = "C:\Users\u1\Documents\Testing\New\merged.xlsx"

$excelFiles = Get-ChildItem -Path 'C:\Users\u1\Documents\Testing' -Filter "*.xlsx"
foreach ($excelFile in $excelFiles)
{
    Import-Excel -Path $excelFile.FullName | Export-Excel -Path $exportExcelPath -WorkSheetname ([io.path]::GetFileNameWithoutExtension($excelFile))
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM