Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>This is self-contained and shows a couple techniques I've found helpful. You'll be very disappointed with Excel's speed, but my users enjoy seeing pretty things on their screen, instead of .csv's. </p> <pre><code>Param ( [parameter(Mandatory=$false)] [string]$targetFile = 'D:\cafp1\middleware\restricted\middleware\IIS\PowerShell\Demos\excel\test.xls' ) begin { Set-StrictMode -version Latest function configureSheet { param ( [parameter(Mandatory=$true)] $appExcel, [parameter(Mandatory=$true)] $appWorkbook, [parameter(Mandatory=$true)] $worksheetName ) # Get the appropriate sheet $sheetNumber = 1 $headerSheet = $appWorkbook.WorkSheets.Item($sheetNumber) $headerSheet.Activate() $headerSheet.Name = $worksheetName # Place the intro text $introRowNumber = 1 $introColumnNumber = 1 $headerSheet.Cells.Item($introRowNumber,$introColumnNumber) = "Intro Text" # Freeze panes for easy navigation $freezeCell = "a2" [void]$headerSheet.Range($freezeCell).Select() $headerSheet.application.activewindow.FreezePanes = $true # Configure headers $headerSheet.Cells.Item(2,1) = "Header 1" $headerSheet.Columns.Item(1).ColumnWidth = 15 $headerSheet.Cells.Item(2,2) = "Header 2" $headerSheet.Columns.Item(2).ColumnWidth = 25 $headerTitles = $headerSheet.UsedRange $headerTitles.Interior.ColorIndex = 40 $headerTitles.Font.ColorIndex = 9 $headerTitles.Font.Bold = $True $firstDataRow = 3 [void]$headerSheet.Cells.Item($firstDataRow,1).Activate() $headerSheet } function reportObject { param ( [parameter(Mandatory=$true)] $sheet, [parameter(Mandatory=$true)] $activeRowNumber, [parameter(Mandatory=$true)] $variant ) # I took out a lot of logic to allow complex objects to be reported. This is easy to extend, though. $sheet.Cells.Item($activeRowNumber,1) = $variant.Category $sheet.Cells.Item($activeRowNumber,2) = $variant.Item } $appExcel = New-Object -comObject Excel.Application $appExcel.visible = $true $appExcel.ScreenUpdating = $true $appWorkbook = $appExcel.Workbooks.Add() $originalCalculationState = $appExcel.Calculation $appExcel.Calculation = -4135 # Magic number to disable calculation $appWorkbook.Title = "Title in Properties" $appWorkbook.Subject = "Subject in Properties" $currentSheet = "WorkSheet Name" $sheet = $false } process { $sheet = configureSheet ` -appExcel $appExcel ` -appWorkbook $appWorkbook ` -worksheetName $currentSheet $activeRow = 3 $record = New-Object PSObject add-member -InputObject $record Noteproperty 'Category' "Category1" add-member -InputObject $record Noteproperty 'Item' "" reportObject ` -sheet $sheet ` -activeRowNumber $activeRow ` -variant $record } end { # Save and close this workbook $headerSheet = $appWorkbook.WorkSheets.Item(1) $row = 3 $column = 1 [void]$headerSheet.Cells.Item($row,$column).Select() [void]$appExcel.Selection.AutoFilter() [void]$headerSheet.Cells.Item($row,$column).Activate() $appExcel.Calculation = $originalCalculationState # Excel defaults to My Documents as the home folder $appExcel.DisplayAlerts = $false $appWorkbook.SaveAs($targetFile,1) $appWorkbook.Close() # Do this to get PowerShell Console to really kill the Excel object. # PowerShell ISE will only really kill Excel once it itself is killed. [void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($appExcel) } </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload