【问题标题】:Can PowerShell generate a plain Excel file with multiple sheets?PowerShell 可以生成包含多个工作表的纯 Excel 文件吗?
【发布时间】:2015-09-19 21:30:48
【问题描述】:

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

PowerShell 可以直接调用 Excel DLL 并从 CSV 文件构造工作表吗?

【问题讨论】:

    标签: excel csv powershell


    【解决方案1】:

    你可以使用Excel.ComObject:

    ## Excel must be installed for this function to work...
    
    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 文件的路径,它将为文件夹中的每个 CSV 创建一个工作表,

    像这样运行它:

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

    【讨论】:

    • 太棒了!非常感谢。
    • 欢迎您,如果它解决了您的问题,请将其标记为答案
    【解决方案2】:

    使用 Export-excel 方法会创建多张工作表

    $a=[pscustomobject]@{ColumnOne=1;ColumnTwo=2;}
    $b=[pscustomobject]@{ColumnOne=1;ColumnTwo=2;}
    
    $a|Export-excel $fileName -Autosize -TableName A -WorksheetName A
    $b|Export-excel $fileName -Autosize -TableName B -WorksheetName B
    

    生成的电子表格将如下所示...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-15
      • 1970-01-01
      • 1970-01-01
      • 2020-12-22
      • 2020-11-21
      • 2020-07-17
      • 2021-01-27
      • 2020-10-15
      相关资源
      最近更新 更多