Hi Guys,
I am facing issue with the pivot table creation through powershell. Below is the code that I am using
# requires excell COM
#Create excel COM object
Clear-Host
$excel = New-Object -ComObject excel.application
#Make Visible
$excel.Visible = $True
#Add a workbook
$workbook = $excel.Workbooks.Add()
#Connect to first worksheet to rename and make active
$pivotSheet=$workbook.Worksheets.Add();
$pivotSheet=$workbook.Worksheets.Item("Sheet1")
$pivotSheet.Name ="Pivot"
$serverInfoSheet = $workbook.Worksheets.Item(1)
$serverInfoSheet.Name = 'DiskInformation'
$serverInfoSheet.Activate() | Out-Null
#Create a Title for the first worksheet and adjust the font
$row = 1
$Column = 1
#Create a header for Disk Space Report; set each cell to Bold and add a background color
$serverInfoSheet.Cells.Item($row,$column)= 'Environment'
$serverInfoSheet.Cells.Item($row,$column).Interior.ColorIndex =48
$serverInfoSheet.Cells.Item($row,$column).Font.Bold=$True
$Column++
$serverInfoSheet.Cells.Item($row,$column)= 'Drive'
$serverInfoSheet.Cells.Item($row,$column).Interior.ColorIndex =48
$serverInfoSheet.Cells.Item($row,$column).Font.Bold=$True
$Column++
$serverInfoSheet.Cells.Item($row,$column)= 'TotalCapacity(GB)'
$serverInfoSheet.Cells.Item($row,$column).Interior.ColorIndex =48
$serverInfoSheet.Cells.Item($row,$column).Font.Bold=$True
$Column++
$serverInfoSheet.Cells.Item($row,$column)= 'Used Capacity(GB)'
$serverInfoSheet.Cells.Item($row,$column).Interior.ColorIndex =48
$serverInfoSheet.Cells.Item($row,$column).Font.Bold=$True
$Column++
$serverInfoSheet.Cells.Item($row,$column)= 'Free Space(GB)'
$serverInfoSheet.Cells.Item($row,$column).Interior.ColorIndex =48
$serverInfoSheet.Cells.Item($row,$column).Font.Bold=$True
$Column++
$serverInfoSheet.Cells.Item($row,$column)= 'Freespace %'
$serverInfoSheet.Cells.Item($row,$column).Interior.ColorIndex =48
$serverInfoSheet.Cells.Item($row,$column).Font.Bold=$True
$Column++
#Now it is time to add the data into the worksheet!
#Increment Row and reset Column back to first column
$row++
$Column = 1
$disks = Get-WmiObject -ComputerName "sanky555" -Class Win32_LogicalDisk -Filter "DriveType = 3"
foreach($disk in $disks)
{
$deviceID = $disk.DeviceID;
$volName = $disk.VolumeName;
[float]$size = $disk.Size;
[float]$freespace = $disk.FreeSpace;
$percentFree = [Math]::Round(($freespace / $size) * 100, 2);
$sizeGB = [Math]::Round($size / 1073741824, 2);
$freeSpaceGB = [Math]::Round($freespace / 1073741824, 2);
$usedSpaceGB = $sizeGB - $freeSpaceGB;
$color = $whiteColor;
Write-Host $deviceID $volName $size $freespace $percentFree $freeSpaceGB $usedSpaceGB
$serverInfoSheet.Cells.Item($row,$column)= "Test";$Column+=1;
$serverInfoSheet.Cells.Item($row,$column)= $deviceID;$Column+=1;
$serverInfoSheet.Cells.Item($row,$column)= $sizeGB;$Column+=1;
$serverInfoSheet.Cells.Item($row,$column)= $usedSpaceGB;$Column+=1;
$serverInfoSheet.Cells.Item($row,$column)= $freeSpaceGB;$Column+=1;
$serverInfoSheet.Cells.Item($row,$column)= $percentFree;$Column+=1;
$Column=1;
$row++
}
#Increment to next row and reset Column to 1
$Column = 1
$row++
# rename workbook
#$workbook = $workbook
#$workbook = $excel.Worksheets.add()
# Get sheets
$ws3 = $workbook.worksheets | where {Write-Host "Sheet Name;"$_.name} #<------- Selects sheet 3
$ws3 = $workbook.worksheets | where {$_.name -eq "DiskInformation"} #<------- Selects sheet 3
$xlPivotTableVersion12 = 3
$xlPivotTableVersion10 = 1
$xlCount = -4112
$xlDescending = 2
$xlDatabase = 1
$xlHidden = 0
$xlRowField = 1
$xlColumnField = 2
$xlPageField = 3
$xlDataField = 4
$xlDirection = [Microsoft.Office.Interop.Excel.XLDirection]
# R1C1 means Row 1 Column 1 or "A1"
# R65536C5 means Row 65536 Column E or "E65536"
$range1=$ws3.range("A1")
$range1=$ws3.Range($range1,$range1.End($xlDirection::xlDown))
$range2=$ws3.range("H1")
$range2=$ws3.Range($range2,$range2.End($xlDirection::xlDown))
$selection = $ws3.Range($range1, $range2)
#Write-Host "R2:"$range2
$PivotTable = $workbook.PivotCaches().Create($xlDatabase,$selection,$xlPivotTableVersion10)
$PivotTable.CreatePivotTable("Pivot!R1C1","Tables1") | Out-Null
[void]$ws3.select();
$workbook.ShowPivotTableFieldList = $true
$PivotFields = $ws3.PivotTables("Tables1").PivotFields("Used Capacity(GB)")
$PivotFields.DragToRow= $false
#$PivotFields.IncludeNewItemsInFilter=$true;
$PivotFields.Orientation = $xlDataField
#$PivotFields.Position=1
$PivotFields = $ws3.PivotTables("Tables1").PivotFields("Farms/Classification")
$PivotFields.Orientation = $xlRowField
$PivotFields = $ws3.PivotTables("Tables1").PivotFields("Environment")
$PivotFields.Orientation = $xlColumnField
$PivotFields = $ws3.PivotTables("Tables1").PivotFields("Free Space(GB)")
$PivotFields.DragToRow= $false
$PivotFields.Orientation = $xlDataField
Below is the error that I receive.
Unable to get the PivotTables property of the Worksheet classfor the line
$PivotFields = $ws3.PivotTables("Tables1").PivotFields("Used Capacity(GB)"). Suprisingly this issue happens to be only when I try to create a pivot table in the new excel sheet. can you please help me to identify the issue here?