PSExcel Export-XLSX添加额外的列

一个月一次,我运行一个PS脚本将一些客户端数据从MSSQL数据库导出到Excel电子表格。 我对这个月的查询做了一些很大的调整,返回的数据没有问题(当我在Management Studio中运行时),而且当我运行创buildExcel文件的PS脚本时,它也运行正常。

问题是,当我去打开Excel文件,有一个错误消息说明

我们发现file.xlsx中的一些内容有问题。 你想让我们尽可能地恢复吗? 如果您信任该工作簿的来源,请单击是。

我点击是,然后打开文件修复报告说,它修复了/xl/tables/table1.xml的表。 我需要的所有数据都在那里,所以我不太在意(尽pipe我想修复它)。 我的问题是,除了我在查询中指定的列,还有五个额外的列:

  1. RowError
  2. 的RowState
  3. ItemArray
  4. HasErrors

如何阻止这些出现在我的Excel文件中?

我的PS脚本包括:

# -- START SETUP $myWindowsID=[System.Security.Principal.WindowsIdentity]::GetCurrent() $myWindowsPrincipal=new-object System.Security.Principal.WindowsPrincipal($myWindowsID) $adminRole=[System.Security.Principal.WindowsBuiltInRole]::Administrator if ($myWindowsPrincipal.IsInRole($adminRole)) { $Host.UI.RawUI.WindowTitle = $myInvocation.MyCommand.Definition + "(Elevated)" $Host.UI.RawUI.BackgroundColor = "DarkBlue" clear-host } else { $newProcess = new-object System.Diagnostics.ProcessStartInfo "PowerShell"; $newProcess.Arguments = $myInvocation.MyCommand.Definition; $newProcess.Verb = "runas"; [System.Diagnostics.Process]::Start($newProcess); exit } Import-Module C:\scripts-and-reports\Modules\PSExcel Import-Module SQLPS # -- END SETUP :: START EXPORT invoke-sqlcmd -inputfile "C:\scripts-and-reports\all_new-matters-since-last-run.sql" -serverinstance "2012R2-PE-SVR\PRACTICEEVOLVE" -database "PracticeEvolve_c1" | Export-XLSX -WorksheetName "15-05-2017 to $(get-date -f dd-MM-yyyy)" -Path "C:\scripts-and-reports\$(get-date -f yyyy-MM-dd) Tamworth PE client report since 15-05-2017.xlsx" -Table -Force -Verbose Write-Host -NoNewLine "Export and report creation complete! Press any key to continue..." $null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown") # -- END EXPORT 

这些是来自Invoke-SQLCMD结果的属性。 您不会看到它们通过标准输出显示,因为它们未被选为该cmdlet的默认属性的一部分。 与Get-ChildItem默认情况下不会显示所有文件/文件夹属性一样。 但是他们仍然存在,所以如果你不希望他们在Excel中,你需要排除他们

 invoke-sqlcmd -inputfile "C:\scripts-and-reports\all_new-matters-since-last-run.sql" -serverinstance "2012R2-PE-SVR\PRACTICEEVOLVE" -database "PracticeEvolve_c1" | Select-Object * -ExcludeProperty "RowError","RowState","Table","ItemArray","HasErrors" | Export-XLSX -WorksheetName "15-05-2017 to $(get-date -f dd-MM-yyyy)" -Path "C:\scripts-and-reports\$(get-date -f yyyy-MM-dd) Tamworth PE client report since 15-05-2017.xlsx" -Table -Force -Verbose 

有效的将返回除了你不在寻找的所有属性。 当您不知道要返回的数据集的属性时,这非常有用。 否则,你可以只使用一个独占列表,如Select-Object Name,Length,Bagel