Как изменить размер ширины столбца Excel с помощью ImportExcel

#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