【问题标题】:Can I add title rows to a CSV export in Powershell?我可以将标题行添加到 Powershell 中的 CSV 导出吗?
【发布时间】:2015-01-18 15:18:31
【问题描述】:

我在 Powershell 中将报告导出为 CSV,并且我被要求在标题行上方提供三行标题信息、报告日期等。

如果我导出为 CSV,即$reportdata | export-csv -notypeinformation fooreport.csv,然后在记事本中手动添加标题行,即,

"Title"
"Date of Report - XX-XX-XXXX"
 "***Important disclaimer about report***"
"Column1","Column2","Column3", etc
"Data1","Data2","Data3", etc

CSV 报告在 Excel 中打开良好,并且标题和数据行得到适当处理。

但是,当我尝试在 PS 中执行以下操作时,

#Create Report Header

$date = get-date -format "dd MMM yyyy"

$title = @"
"Mailbox Send As, Full Permission and Send on Behalf Report"
"$date"
"***** Important Disclaimer - Only Explicit or Non-Inherited Permissions Are Displayed in this Report *****"
"@

$reportpath = "D:\dev\report.csv"

$rep | export-csv -notypeinformation $reportpath

$temp = gc $reportpath

echo $title > $reportpath

$temp >> $reportpath

CSV 无法在 Excel 中正确打开并且分隔不正确(即,引号和逗号在单元格中可见),即使两个文件在记事本中看起来相同。

有没有一种方法可以在不破坏 CSV 文件完整性的情况下从 Powershell 执行我想要执行的操作?我想知道我是否以某种方式删除了一些表示 CSV 文件中标题行的关键信息 - 因为这两个文件是相同的,我想知道我是否可能缺少隐藏字符或特殊字符?

【问题讨论】:

    标签: powershell csv powershell-2.0 powershell-3.0 export-to-csv


    【解决方案1】:

    您不需要使用export-csv 输出到文件,只是为了读回文件以进行更改。让我们一次输出所有数据,而无需再次读回。

    $rep = $rep | ConvertTo-Csv -NoTypeInformation
    
    $title | Set-Content -Path $reportpath
    $rep | Add-Content -Path $reportpath
    

    不是我想要的,因为我认为你可以在一行中得到它,但你不需要以这种方式读回文件。主要是因为它困扰着我,我得到了我正在寻找的单线。

    $reportpath = "D:\dev\report.csv"
    Set-Content -Path c:\temp\export.csv -Value "$title`r`n$(($rep | ConvertTo-Csv -NoTypeInformation) -Join "`r`n")"
    

    ConvertTo-Csv 创建一个字符串数组。我们用换行符"`r`n" 连接所有字符串。然后我们将标题附加到该数据并用另一个换行符将其拆分。

    【讨论】:

    • 非常感谢,马特。实际上,我在 Stack Overflow 上找到了特定的方法(通过 export-csv 转储到 CSV,导入到变量,修改然后重新导出)并且不知道我还能如何解决 export-csv 并没有真正做到的事实原生支持标题行。我会尽快尝试您的方法并发布我的发现。
    猜你喜欢
    • 1970-01-01
    • 2016-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-05
    • 2017-02-15
    相关资源
    最近更新 更多