#excel #powershell #format
#превосходить #powershell #формат
Вопрос:
Я скачал отчет Excel, но мне нужно изменить размер некоторых столбцов на разную ширину с помощью PowerShell, поэтому мне просто интересно, как я могу этого добиться. Любая помощь или предложение будут оценены по достоинству.
Например, я хочу изменить пользователя, Дату и время, столбец элемента до размера ширины 30, столбец активности до размера ширины 50 и некоторые другие столбцы до размера ширины 30 и так далее…
function Modify-Columns { $params = @{ AutoSize = $true # TableName = 'exampleTable' TableStyle = 'Light9' # =gt; Here you can chosse the Style you like the most BoldTopRow = $true WorksheetName = "Audit Log" PassThru = $true Path = "C:AuditLogSearch$((Get-Date).AddDays(-7).ToString('yyyy-MM-dd')) _ $(Get-Date -Format "yyyy-MM-dd") Audit-Log-Records.xlsx" # =gt; Define where to save it here! } Write-Host "Start Modifiying Column and Row using AD DisplayName and Excel Files" $modifiedFile = Import-Csv "C:AuditLogSearchModified-Audit-Log-Records.csv" $actionReference = Import-Csv "C:AuditLogSearchReferenceeDiscovery_Activities_List.csv" $result = foreach ($u in $modifiedFile) { $u.User = (Get-AzureADUser -ObjectId $u.User).DisplayName New-Object PsObject -Property @{ User = $u.User # "Search Criteria" = $u."Search Criteria" "Result Status" = $u."Result Status" "Date amp; Time" = $u."Date amp; Time" "Search Conditions" = $u."Search Conditions" "SharePoint Sites" = $u."SharePoint Sites" "Exchange Public Folders" = $u."Exchange Public Folders" "Exchange Mailboxes" = $u."Exchange Mailboxes" "Case Name" = $u."Case Name" "Search Criteria" = $u."Search Criteria" "Item" = $u."Item" "Activity" = if (($actionReference | where-object { $_.Name -eq $u."Activity" }).Value -ne $null) { ($actionReference | where-object { $_.Name -eq $u."Activity" }).Value } else { $u."Activity" } } | Select-object -Property User, "Date amp; Time", "Case Name", "Item", "Activity" , "SharePoint Sites", "Exchange Mailboxes", "Exchange Public Folders" , "Search Criteria", "Result Status" } $xlsx = $result | Export-Excel @params $ws = $xlsx.Workbook.Worksheets[$params.Worksheetname] $ws.View.ShowGridLines = $false # =gt; This will hide the GridLines on your file Close-ExcelPackage $xlsx Write-Host "Finished Modifiying Column and Row using AD DisplayName and Excel Files" }
Ответ №1:
Как вы, возможно, видели, -AutoSize
это не очень точно, оно имеет тенденцию оставлять больше ширины, чем необходимо. В случае, если вам нужно установить жестко заданное значение для одного из столбцов, которые вы можете использовать:
$xlsx.Workbook.Worksheets['SheetName'].Column(n).width = newVal
ПРИМЕЧАНИЕ: Этот метод требует использования -PassThru
.
Вот минимальный воспроизводимый пример:
$result = [pscustomobject]@{ Col1 = 'Test' Col2 = 'Test' Col3 = [datetime]::Now } $params = @{ AutoSize = $true TableStyle = 'Light9' BoldTopRow = $true WorksheetName = "Audit Log" PassThru = $true Path = './test.xlsx' } $xlsx = $result | Export-Excel @params $ws = $xlsx.Workbook.Worksheets[$params.WorksheetName] # This is how you can get the number of Columns, Index starts from 1 not 0. $ws.Dimension.Columns # =gt; 3 $ws.Column(1).Width # =gt; Col1 current Width is 9.140625 $ws.Column(1).Width = 5 # =gt; Updated to 5 $ws.View.ShowGridLines = $false # =gt; Hide the GridLines Close-ExcelPackage $xlsx