繁体   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