PSExcel Export-XLSX添加额外的列

时间:2017-09-11 11:22:24

标签: sql-server excel powershell

每月一次我运行PS脚本将一些客户端数据从MSSQL数据库导出到Excel电子表格。我已经对本月的查询进行了一些大的调整,返回的数据很好(当我在Management Studio中运行时),当我运行创建Excel文件的PS脚本时,它运行正常。

问题是当我打开Excel文件时,会显示一条错误消息,指出

  

我们发现 file.xlsx 中的某些内容存在问题。你想要我们吗?   试图尽可能多地恢复?如果你相信的来源   工作簿,单击是。

我单击是,然后打开文件,其中包含修复报告,说明它已从/xl/tables/table1.xml修复了表。我需要的所有数据都在那里,所以我不太关心它(我想解决它)。我的问题是,除了我在查询中指定的列之外,还有五个额外的列:

  1. RowError
  2. 的RowState
  3. ItemArray
  4. HasErrors
  5. 如何阻止这些出现在我的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
    

1 个答案:

答案 0 :(得分:2)

这些是来自ext.kotlin_version = '1.1.4-2' 结果的属性。您不会看到它们通过标准输出显示,因为它们未被选为该cmdlet的默认属性集的一部分。与Invoke-SQLCMD默认情况下不显示所有文件/文件夹属性的方式相同。它们仍然存在,但如果您不想在Excel中使用它们,则需要将它们排除在外

Get-ChildItem

有效地将返回除您不寻找的属性之外的所有属性。当您不知道要返回的数据集的属性时,这非常有用。否则,您可以使用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

等独占列表