【问题标题】:How to Combine Excel Workbooks into One Workbook and Name the Worksheets如何将 Excel 工作簿合并为一个工作簿并命名工作表
【发布时间】:2019-05-29 12:51:20
【问题描述】:

我正在尝试将多个 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 无法访问“新建”。该文档可以是只读的或加密的。 您不能在空值表达式上调用方法。

【问题讨论】:

    标签: excel powershell


    【解决方案1】:

    您面临的问题是$Everysheet.Copy($Worksheet) 调用正在从$Everysheet 复制值和工作表名称并将其放在$Worksheet 之前。可以查看Copy方法here的文档。

    我不确定您如何将工作表名称跟踪到各个工作簿以重命名它们,但是我强烈建议对任何与 Excel 相关的文件使用 ImportExcel 模块。它使它们更易于使用,并且只需几秒钟即可使其正常工作。此外,它还具有读取和编辑 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))
    }
    

    【讨论】:

    • 效果很好(在我安装了模块之后)。谢谢!!
    猜你喜欢
    • 2015-09-07
    • 2014-12-14
    • 1970-01-01
    • 1970-01-01
    • 2020-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多