使用PowerShell将工作表从Excel中提取到单独的文件中

我试图将多张文件分割成多个文件,并search此博客: 使用PowerShell将工作表从Excel中提取到单独的文件中 。 我试过xls文件,它工作正常。 但是,当我尝试xlsx文件,它只是输出整个源文件,每个工作表作为默认工作表时,我用Excel应用程序打开生成的文件。 我很困难的解决scheme,但没有运气。 我的testing代码就像打击一样:

$Excel = New-Object -ComObject "Excel.Application" $Excel.Visible = $false #Runs Excel in the background. $Excel.DisplayAlerts = $false #Supress alert messages. $filepath ="D:\powershell\test.xlsx" $Workbook = $Excel.Workbooks.open($filepath) $WorkbookName = "test.xlsx" $output_type = "xlsx" if ($Workbook.Worksheets.Count -gt 0) { write-Output "Now processing: $WorkbookName" $FileFormat = [Microsoft.Office.Interop.Excel.XlFileFormat]::xlOpenXMLWorkbook $WorkbookName = $filepath -replace ".xlsx", "" foreach($Worksheet in $Workbook.Worksheets) { $ExtractedFileName = $WorkbookName + "~~" + $Worksheet.Name + "." + $output_type $Worksheet.SaveAs($ExtractedFileName, $FileFormat) write-Output "Created file: $ExtractedFileName" } } $Workbook.Close() $Excel.Quit() 

为了与标准的Excel实践保持一致,将工作表复制到任何目标都将创build一个新的工作簿作为单独的工作表,该工作簿将成为ActiveWorkbook 。

 $Excel = New-Object -ComObject "Excel.Application" $Excel.Visible = $false #Runs Excel in the background. $Excel.DisplayAlerts = $false #Supress alert messages. $filepath ="D:\powershell\test.xlsx" $Workbook = $Excel.Workbooks.open($filepath) $WorkbookName = "test.xlsx" $output_type = "xlsx" if ($Workbook.Worksheets.Count -gt 0) { write-Output "Now processing: $WorkbookName" $FileFormat = [Microsoft.Office.Interop.Excel.XlFileFormat]::xlOpenXMLWorkbook $WorkbookName = $filepath -replace ".xlsx", "" foreach($Worksheet in $Workbook.Worksheets) { $Worksheet.Copy() $ExtractedFileName = $WorkbookName + "~~" + $Worksheet.Name + "." + $output_type $Excel.ActiveWorkbook.SaveAs($ExtractedFileName, $FileFormat) $Excel.ActiveWorkbook.Close write-Output "Created file: $ExtractedFileName" } } $Workbook.Close() $Excel.Quit() [System.Runtime.Interopservices.Marshal]::ReleaseComObject($Excel) Stop-Process -Name EXCEL Remove-Variable Excel 

现在,它将工作簿传播到多个工作簿,每个工作簿都有一个原始工作表的副本。 为了避免在任务pipe理器的“进程”选项卡中出现一个stream氓(不可见)的excel.exe,我已经将一堆“谋杀Excel”命令堆积在尾部。

有一个很好的线程去除如何打开 excel.exe的最后一个实例; 另存为; 然后从PowerShell4closuresExcel 2013(启用macros)工作簿 。