PowerShell可以生成一个简单的Excel文件与多个工作表?

Export-Csv cmdlet可以将数据导出为CSV文件,然后可以将其导入到Excel中。 但是,我想要做的是将不同的CSV文件(具有不同的列定义)合并到一个具有多个工作表(每个工作表不同)的Excel文件中。

PowerShell可以直接调用Excel DLL并从CSV文件构build表单吗?

你可以用Excel.ComObject来实现,我有一个我创build的函数,你可以使用它,做你所需要的:

Function Merge-CSVFiles { Param( $CSVPath = "C:\CSV", ## Soruce CSV Folder $XLOutput="c:\temp.xlsx" ## Output file name ) $csvFiles = Get-ChildItem ("$CSVPath\*") -Include *.csv $Excel = New-Object -ComObject excel.application $Excel.visible = $false $Excel.sheetsInNewWorkbook = $csvFiles.Count $workbooks = $excel.Workbooks.Add() $CSVSheet = 1 Foreach ($CSV in $Csvfiles) { $worksheets = $workbooks.worksheets $CSVFullPath = $CSV.FullName $SheetName = ($CSV.name -split "\.")[0] $worksheet = $worksheets.Item($CSVSheet) $worksheet.Name = $SheetName $TxtConnector = ("TEXT;" + $CSVFullPath) $CellRef = $worksheet.Range("A1") $Connector = $worksheet.QueryTables.add($TxtConnector,$CellRef) $worksheet.QueryTables.item($Connector.name).TextFileCommaDelimiter = $True $worksheet.QueryTables.item($Connector.name).TextFileParseType = 1 $worksheet.QueryTables.item($Connector.name).Refresh() $worksheet.QueryTables.item($Connector.name).delete() $worksheet.UsedRange.EntireColumn.AutoFit() $CSVSheet++ } $workbooks.SaveAs($XLOutput,51) $workbooks.Saved = $true $workbooks.Close() [System.Runtime.Interopservices.Marshal]::ReleaseComObject($workbooks) | Out-Null $excel.Quit() [System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) | Out-Null [System.GC]::Collect() [System.GC]::WaitForPendingFinalizers() } 

更新CSV文件的path,它将为该文件夹中的每个CSV创build一个工作表,

像这样运行它:

 Merge-CSVFiles -CSVPath C:\CsvFolder -XLOutput C:\ExcelFile.xlsx