excel - 如何将 Excel 工作簿合并为一个工作簿并命名工作表
问题描述
我正在尝试将多个 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 方法的文档。
我不确定您如何将工作表名称跟踪到各个工作簿以重命名它们,但是我强烈建议对任何与 Excel 相关的文件使用ImportExcel模块。它使它们更易于使用,并且只需几秒钟即可使其正常工作。此外,它还具有无需安装 Microsoft Excel 即可使用读取和编辑 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))
}
推荐阅读
- html - 需要提示如何使最简单的 .CSHTML 自动完成
- python - python 编码项目中的谷歌可教机器模型加载问题
- javascript - 为什么 Angular 总是重定向到主页?
- azure-active-directory - 我可以将 bcrypted 密码导入 Azure AD B2C 吗?
- laravel - 如何更改 spatie 媒体库中的图像目录?
- react-native - 嵌套在 Stack Navigator 中的 Drawer 中的动态项目 react-navigation
- c# - 获取 ML NET 模型 zip 文件流时 Blazor 中的错误
- r - Read_csv 忽略分隔符
- .htaccess - .htaccess 重写命令的行为不符合预期
- python - 无法从 Windows 命令提示符运行 PIP 命令