1

我正在编写一个脚本,我试图将多个 csv 合并到一个 Excel 文件中,其中 csv 文件名作为不同的工作表。

所有 csv 文件都具有相同的列数和名称。

我的服务器上没有安装 Excel,所以我使用以下代码编写了此代码ImportExcel

#Install-Module ImportExcel -scope CurrentUser
$path="C:\Scripts" #target folder
cd $path;
$csvs = Get-ChildItem .\* -Include *.csv
$csvCount = $csvs.Count
Write-Host "Detected the following CSV files: ($csvCount)"
foreach ($csv in $csvs) {
    Write-Host " -"$csv.Name
}

$excelFileName = $path + "\" + $(get-date -f yyyyMMdd) + "_combined-data.xlsx"
Write-Host "Creating: $excelFileName"

foreach ($csv in $csvs) {
    $csvPath = $path + $csv.Name
    $worksheetName = $csv.Name.Replace(".csv","")
    Write-Host " - Adding $worksheetName to $excelFileName"
    Import-Csv -Path $csvPath | Export-Excel -Path $excelFileName -WorkSheetname $worksheetName

该脚本需要时间并且执行没有任何问题,但没有生成 Excel 工作表。

请你能帮我找到并解决这个脚本中的问题吗?

4

1 回答 1

1

如果要将每个 CSV 的工作表添加到 Excel 文件中,代码应如下所示:

$path = "D:\Testing"
$csvs = Get-ChildItem $path -Filter *.csv
$excelFileName = Join-Path $path -ChildPath "$(Get-Date -f yyyyMMdd)_combined-data.xlsx"

foreach ($csv in $csvs)
{
    $props = @{
        WorksheetName = $csv.BaseName
        Path = $excelFileName
    }

    Import-Csv -Path $csv |
    Export-Excel @props
}

如果你想在内存中做所有事情(比上面的例子更有效率),那就有点复杂了。你需要使用-PassThru.

请注意,这适用于ImportExcel 7.1.2,请确保您拥有最新版本。

$path = "D:\Testing"
$csvs = Get-ChildItem $path -Filter *.csv
$excelFileName = Join-Path $path -ChildPath "$(Get-Date -f yyyyMMdd)_combined-data.xlsx"

foreach ($csv in $csvs)
{
    $content = Import-Csv -Path $csv

    $props = @{
        WorksheetName = $csv.BaseName
        PassThru = $true
        InputObject = $content
    }

    if(-not $xlsx)
    {
        $props.Path = $excelFileName
        $xlsx = Export-Excel @props

        continue
    }

    $props.ExcelPackage = $xlsx
    Export-Excel @props > $null
}

Close-ExcelPackage $xlsx

如果您希望所有 CSV文件在同一个工作表上,假设它们都具有相同的标题

$path = "D:\Testing"
$csvs = Get-ChildItem $path -Filter *.csv
$excelFileName = Join-Path $path -ChildPath "$(Get-Date -f yyyyMMdd)_combined-data.xlsx"

Import-Csv -Path $csvs |
Export-Excel -WorksheetName 'Merged' -Path $excelFileName
于 2021-07-30T13:54:40.133 回答