Compare commits

...

112 Commits

Author SHA1 Message Date
dfinke
ebdfd3d090 process only if the worksheetname is '*' for all 2022-11-07 12:37:28 -05:00
dfinke
a1986de292 update filename and check count returned 2022-11-07 12:36:59 -05:00
dfinke
30f2597f0d rename xlsx 2022-11-07 12:36:47 -05:00
dfinke
09c22654ab Initial timing tests. 7.4.2 is the benchmark 7.4.2 vs newer versions processing time #1299 2022-11-06 15:28:11 -05:00
dfinke
63f6543784 update 2022-10-20 20:35:50 -04:00
Doug Finke
306e10c348 Merge pull request #1273 from steve-daedilus/master
Set Validate Range for rows to max rows available
2022-10-20 20:23:05 -04:00
dfinke
970febd6d3 The orignal test took too long to run 2022-10-20 20:13:27 -04:00
Stephen Brown
e703a21dec Pester test setup for Max Rows retrieval 2022-10-20 18:06:08 +01:00
Stephen Brown
c1be6a8d82 Merge branch 'dfinke:master' into master 2022-10-18 09:51:53 +01:00
dfinke
201b9cd984 Add Sheet visibility property 2022-10-15 19:34:58 -04:00
dfinke
559bfa2a7f bump version update log 2022-10-15 19:34:24 -04:00
Stephen Brown
4bd3efa1ef Set Validate Range for rows to max rows available
$StartRow parameter had ValidateRange(1,9999) which was limiting the start row to a maximum of 9999. There's no good reason this cannot be any row in the spreadsheet, of which the maximum is 1048576 in modern instances of Excel.
2022-10-14 19:00:42 +01:00
Doug Finke
926042e5b6 Merge pull request #1266 from stahler/patch-4
Update Export-Excel.ps1
2022-10-11 16:25:24 -04:00
Wes Stahler
be1e55cf8d Update Export-Excel.ps1
Fixed case on -BarChart switch.
2022-10-11 16:18:16 -04:00
Doug Finke
a86c55b3ac update 2022-09-24 13:08:43 -04:00
Doug Finke
fa14695fb9 Merge pull request #1254 from WilsonStewart/master
Fixed typo of 'pararameter' to 'parameter'
2022-09-24 13:07:32 -04:00
WilsonStewart
6322bafaed Fixed typo of 'pararameter' to 'parameter' 2022-09-21 16:25:40 -06:00
Doug Finke
c7a6f4ba35 update changelog 2022-09-20 10:36:49 -04:00
Doug Finke
49a6805727 Merge pull request #1253 from stahler/patch-3
Update convertfrom-exceltosqlinsert.md
2022-09-20 10:21:03 -04:00
Wes Stahler
c124ee199d Update convertfrom-exceltosqlinsert.md
fix spelling
2022-09-19 20:46:43 -04:00
Doug Finke
858cf60a2f Merge pull request #1251 from JeremiahTheFirst/master
Update Add-Worksheet.ps1 - 'worsheet' to 'worksheet' in warnings
2022-09-16 16:01:12 -04:00
Jeremiah Adams
fcde64780e Update Add-Worksheet.ps1 - 'worsheet' to 'worksheet' in warnings 2022-09-15 09:04:08 -05:00
dfinke
be5d270f44 update change log 2022-09-03 16:51:59 -04:00
Doug Finke
f9fb49ad04 Merge pull request #1234 from stahler/patch-2
Update open-excelpackage.md
2022-08-25 13:51:21 -04:00
Wes Stahler
4727bb3b2b Update open-excelpackage.md
Small changes to Example 2
2022-08-24 21:34:46 -04:00
dfinke
ac435fc1e1 bump version 2022-08-24 18:37:24 -04:00
dfinke
340ffc560b Use EZOut to format data form Excel to Mardown tables and Yaml 2022-08-24 18:37:14 -04:00
Doug Finke
069c227391 Merge pull request #1233 from g-pearl/master
Update Bottom Spelling Error
2022-08-24 18:21:38 -04:00
g-pearl
fa4f3a23cd Update Bottom Spelling Error 2022-08-24 08:54:36 -06:00
Doug Finke
f54db0e2d9 Merge pull request #1220 from dfinke/Add-Group-Column-Tests
Added Group Column tests
2022-07-20 07:15:46 -04:00
dfinke
8c1388a799 Added Group Column tests 2022-07-17 11:24:51 -04:00
dfinke
7c473d1fb6 bump version 2022-07-16 13:45:40 -04:00
dfinke
31366057df Add images for changelog 2022-07-16 13:45:34 -04:00
Doug Finke
f102ece700 Merge pull request #1219 from jhoneill/PivotTableUpdates
Pivot table updates
2022-07-16 13:25:17 -04:00
dfinke
950b9ab078 update with examples that were added 2022-07-16 12:19:23 -04:00
Doug Finke
869ab59a8a tweak README 2022-07-16 11:47:33 -04:00
Doug Finke
1e9a73d176 Merge pull request #1214 from dbrennand/feat/vba-pivotable-tabular-repeat-label-no-subtotals
Feat/VBA-PivotTable-Tabular-Repeat-Label-No-Subtotals
2022-07-16 11:30:19 -04:00
James O'Neill
37e6896741 Merge branch 'dfinke:master' into PivotTableUpdates 2022-07-14 20:27:59 +01:00
Doug Finke
c39e6cc24c Merge pull request #1216 from chadmando/fixtypo
Fix typo in help
2022-07-14 14:15:16 -04:00
James O'Neill
5ab9d6f23f Add column to GroupNumeric/Date in PivotTables. 2022-07-14 17:43:55 +01:00
chadmando
81e60be51d Fix typo in help
Open-ExcelPackage Example #2 Line#48
remove 'and'
2022-07-13 15:36:17 -05:00
dfinke
943ca7e6d1 Added -Show 2022-07-13 14:13:22 -04:00
Doug Finke
513ff59ba8 Merge pull request #1208 from kkazala/kkazala/exportformatting
Kkazala/exportformatting
2022-07-13 12:09:55 -04:00
dbrennand
45fc5a2631 fix: add missing -Path parameter 2022-07-13 16:59:18 +01:00
dbrennand
8b30fce81a feat: add VBA example to modify PivotTables
Excel macro example for changing all PivotTables in the workbook to Tabular form, repeats labels and disables Subtotals.
2022-07-13 16:57:22 +01:00
dfinke
0990c0ef09 used $PSScriptRoot instead 2022-07-13 09:50:02 -04:00
Kinga Kazala
724ed6b197 Get-ConditionalFormatting function added 2022-07-13 09:34:30 +02:00
Kinga Kazala
087feedde6 fix: corrected the script to include sheet name, and to add '=' in the ConditionValue 2022-07-13 09:26:19 +02:00
Kinga Kazala
b92ea56fe9 GetConditionalFormatting.xlsx added 2022-07-11 07:58:29 +02:00
Kinga Kazala
c4eed8c25d GetConditionalFormatting.ps1 example added: exports conditional formatting rules in a 'ready to use' format 2022-07-05 16:05:40 +02:00
Kinga Kazala
9051ffc0e5 example update: format both cells, plus format whole row 2022-07-05 15:59:32 +02:00
Doug Finke
050613eede Merge pull request #1206 from dfinke/Investigate-underlinetype-not-being-set
Fix -UnderLineType parameter is ignored in Set-ExcelColumn #1204
2022-07-04 10:47:10 -04:00
Doug Finke
84f51c4823 Merge branch 'master' into Investigate-underlinetype-not-being-set 2022-07-04 10:41:02 -04:00
dfinke
f2544ed1ec Fix -UnderLineType parameter is ignored in Set-ExcelColumn #1204 2022-07-04 10:29:39 -04:00
James O'Neill
5b4857d7a0 New subtotals, tweak module stats example 2022-06-21 16:58:42 +02:00
Doug Finke
45449650c7 Merge pull request #1202 from kkazala/compareCells
Compare cells
2022-06-20 13:07:58 -04:00
Doug Finke
d7348250fc Updated 2022-06-20 13:00:33 -04:00
Kinga Kazala
b53881fd02 Merge branch 'compareCells' of https://github.com/kkazala/ImportExcel into compareCells 2022-06-20 17:20:17 +02:00
Kinga Kazala
632bb263cc docs: Highlight-DiffCells.ps1 example added 2022-06-20 17:19:01 +02:00
Kinga Kazala
658a6b543a docs: Highlight-DiffCells.ps1 example added 2022-06-20 17:12:48 +02:00
Doug Finke
0f301ff619 fix formatting 2022-06-17 12:20:32 -04:00
Doug Finke
115fbb23a7 Merge pull request #1200 from jhoneill/master
Update to Get-HTMLTable, added Import-ByColuumns function and example
2022-06-17 12:04:06 -04:00
dfinke
2b30537c20 update change log 2022-06-17 11:56:47 -04:00
dfinke
22f50d2659 fix spelling 2022-06-17 11:50:02 -04:00
dfinke
f0a2d076e3 Update Import-Html with better defaults 2022-06-17 11:38:19 -04:00
dfinke
835a11bbb3 Update HTML example 2022-06-17 11:37:54 -04:00
James O'Neill
701b8e2062 Fix Get-HTMLTable for .NET core 2022-06-17 09:42:36 +01:00
James O'Neill
6f2bfaff4e Merge branch 'dfinke:master' into master 2022-06-16 14:19:30 +01:00
Doug Finke
ba6cee12d9 Merge pull request #1198 from dfinke/Set-up-GHA-CI/CD
Set up gha ci/cd
2022-06-12 15:28:04 -04:00
Doug Finke
5d36945708 remove fail tests 2022-06-12 15:18:56 -04:00
Doug Finke
6cbf4efd1d try mac 2022-06-12 15:14:27 -04:00
Doug Finke
4feaee46d2 fail tests on windows 2022-06-12 15:11:36 -04:00
Doug Finke
89f90b77fb try failing tests 2022-06-12 15:06:53 -04:00
Doug Finke
98256c61e8 include test for Invoke-ExcelQuery 2022-06-12 14:48:37 -04:00
Doug Finke
ebde9269aa just windows 2022-06-12 14:44:17 -04:00
Doug Finke
e3149b7b40 install ace 2022-06-12 14:42:41 -04:00
Doug Finke
64ff97b486 fix yml 2022-06-12 14:30:16 -04:00
Doug Finke
12f1f23d51 chk platform 2022-06-12 14:19:49 -04:00
Doug Finke
e279cd785e sudo 2022-06-12 13:59:37 -04:00
Doug Finke
04b5a9a096 install dependencies for autosize 2022-06-12 13:57:27 -04:00
Doug Finke
c6a06cc325 see what fails 2022-06-12 13:55:10 -04:00
Doug Finke
a4bed31e1e list pester version 2022-06-12 13:52:12 -04:00
dfinke
c385ca9012 add branches 2022-06-12 13:46:54 -04:00
Doug Finke
2a8cbbba7c Merge pull request #1197 from dfinke/fix-1194-EndRow-and-EndColumn-Parameters-Ignored
Fix 1194 end row and end column parameters ignored
2022-06-12 11:43:33 -04:00
dfinke
b789db9ba3 bump version 2022-06-12 11:32:12 -04:00
dfinke
89a4cfde0d fix test 2022-06-12 10:49:05 -04:00
dfinke
ab56ae4409 Add additional tests 2022-06-12 10:42:16 -04:00
dfinke
ef35c4fca8 Fix for EndRow and EndColumn Parameters Ignored in Import-Excel #1194 2022-06-12 09:53:52 -04:00
James O'Neill
9fad33c7a6 Merge branch 'master' of https://github.com/dfinke/ImportExcel 2022-06-07 22:14:27 +01:00
dfinke
8bb3d50052 Add sample - How to convert abbreviate or shorten long numbers in Excel 2022-05-29 09:54:02 -04:00
dfinke
d5b807d3cb Don't publish images folder and more - Suggestion: Remove unnecessary files when publishing to the gallery #1187 2022-05-28 06:32:01 -04:00
Doug Finke
e2053e4998 fix casing 2022-05-07 17:19:15 -04:00
Doug Finke
8c6c7eeaf6 update 2022-05-07 17:15:24 -04:00
Doug Finke
31abd215dc Merge pull request #1181 from dfinke/update-read-me
Update read me
2022-05-07 09:50:06 -04:00
dfinke
cafaafd53d add link to original readme 2022-05-07 09:45:16 -04:00
dfinke
ee3c8e7680 use / 2022-05-07 09:40:18 -04:00
dfinke
0b207548e0 fix link 2022-05-07 09:39:52 -04:00
dfinke
6628b55ce5 update link 2022-05-07 09:38:28 -04:00
dfinke
f6bfabd96a remove encoding 2022-05-07 09:34:02 -04:00
dfinke
980631df8b update xlsx link 2022-05-07 09:33:08 -04:00
dfinke
4f9b83f0e6 update logo 2022-05-07 08:17:19 -04:00
dfinke
59cf89b451 Additional updates 2022-05-07 08:08:49 -04:00
dfinke
5777d907c4 added Azure pipeline badge 2022-05-06 13:11:56 -04:00
dfinke
d7c516d35e Merge branch 'update-read-me' of https://github.com/dfinke/ImportExcel into update-read-me 2022-05-06 13:01:21 -04:00
dfinke
27d69e7531 Update pointing to examples 2022-05-06 13:01:12 -04:00
Doug Finke
8ae92fba54 spelling 2022-05-05 21:19:24 -04:00
dfinke
aa0f0cf4e2 layout 2022-05-05 18:36:19 -04:00
dfinke
6e38d97498 fix header 2022-05-05 18:35:59 -04:00
dfinke
ef7c8331f5 add links for versions, donate etc 2022-05-05 18:34:56 -04:00
dfinke
267d15f99a Add videos and articles 2022-05-05 18:21:27 -04:00
dfinke
390aca0496 update 2022-05-05 16:58:15 -04:00
jhoneill
f348088b62 Improved Import By Columns example 2021-08-13 12:13:42 +01:00
58 changed files with 2341 additions and 1339 deletions

27
.github/workflows/ci.yml vendored Normal file
View File

@@ -0,0 +1,27 @@
on:
push:
branches:
- master
- Set-up-GHA-CI/CD
pull_request:
jobs:
validate:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [windows-latest, ubuntu-latest, macos-latest]
steps:
- uses: actions/checkout@v1
- name: Run Continuous Integration
shell: pwsh
run : |
if($PSVersionTable.Platform -eq 'Win32NT') {
$null = mkdir ./ace
Invoke-Restmethod https://download.microsoft.com/download/3/5/C/35C84C36-661A-44E6-9324-8786B8DBE231/accessdatabaseengine_X64.exe -OutFile ./ace/ace.exe
Start-Process ./ace/ace.exe -Wait -ArgumentList "/quiet /passive /norestart"
}
cd ./__tests__
Invoke-Pester -Output Detailed

133
Add-Subtotals.ps1 Normal file
View File

@@ -0,0 +1,133 @@
Function Add-Subtotals {
param(
[Parameter(Mandatory=$true, Position=0)]
$ChangeColumnName , # = "Location"
[Parameter(Mandatory=$true, Position=1)]
[hashtable]$AggregateColumn , #= @{"Sales" = "SUM" }
[Parameter(Position=2)]
$ExcelPath = ([System.IO.Path]::GetTempFileName() -replace "\.tmp", ".xlsx") ,
[Parameter(Position=3)]
$WorksheetName = "Sheet1",
[Parameter(ValueFromPipeline=$true)]
$InputObject, #$DataToPivot | Sort location, product
[switch]$HideSingleRows,
[switch]$NoSort,
[switch]$NoOutLine,
[switch]$Show
)
begin {
if (-not $PSBoundParameters.ContainsKey('ExcelPath')) {$Show = $true}
$data = @()
$aggFunctions = [ordered]@{
"AVERAGE" = 1; "COUNT" = 2; "COUNTA" = 3 #(non empty cells) f
"MAX" = 4; "MIN" = 5; "PRODUCT" = 6; "STDEV" = 7 # (sample)
"STDEVP" = 8 # (whole population);
"SUM" = 9; "VAR" = 10 # (Variance sample)
"VARP" = 11 # (whole population) #add 100 to ignore hidden cells
}
}
process {
$data += $InputObject
}
end {
if (-not $NoSort) {$data = $data | Sort-Object $changeColumnName}
$Header = $data[0].PSObject.Properties.Name
#region turn each entry in $AggregateColumn "=SUBTOTAL(a,x{0}}:x{1})" where a is the aggregate function number and x is the column letter
$aggFormulas = @{}
foreach ($k in $AggregateColumn.Keys) {
$columnNo = 0 ;
while ($columnNo -lt $header.count -and $header[$columnNo] -ne $k) {$columnNo ++}
if ($columnNo -eq $header.count) {
throw "'$k' isn't a property of the first row of data."; return
}
if ($AggregateColumn[$k] -is [string]) {
$aggfn = $aggFunctions[$AggregateColumn[$k]]
if (-not $aggfn) {
throw "$($AggregateColumn[$k]) is not a valid aggregation function - these are $($aggFunctions.keys -join ', ')" ; return
}
}
else {$aggfn = $AggregateColumn[$k]}
$aggFormulas[$k] = "=SUBTOTAL({0},{1}{{0}}:{1}{{1}})" -f $aggfn , (Get-ExcelColumnName ($columnNo+1) ).ColumnName
}
if ($aggformulas.count -lt 1) {throw "We didn't get any aggregation formulas"}
$aggFormulas | out-string -Stream | Write-Verbose -Verbose
#endregion
$insertedRows = @()
$singleRows = @()
$previousValue = $data[0].$changeColumnName
$currentRow = $lastChangeRow = 2
#region insert subtotals and send to excel:
#each time there is a change in the column we're intetersted in.
#either Add a row with the value and subtotal(s) function(s) if there is more than one row to total
#or note the row if there was only one row with that value (we may hide it later.)
$excel = $data |
ForEach-Object -process {
if ($_.$changeColumnName -ne $previousValue) {
if ($lastChangeRow -lt ($currentrow - 1)) {
$NewObj = @{$changeColumnName = $previousValue}
foreach ($k in $aggFormulas.Keys) {
$newobj[$k] = $aggformulas[$k] -f $lastChangeRow, ($currentRow - 1)
}
$insertedRows += $currentRow
[pscustomobject]$newobj
$currentRow += 1
}
else {$singleRows += $currentRow }
$lastChangeRow = $currentRow
$previousValue = $_.$changeColumnName
}
$_
$currentRow += 1
} -end { # the process block won't output the last row
if ($lastChangeRow -lt ($currentrow - 1)) {
$NewObj = @{$changeColumnName = $previousValue}
foreach ($k in $aggFormulas.Keys) {
$newobj[$k] = $aggformulas[$k] -f $lastChangeRow, ($currentRow - 1)
}
$insertedRows += $currentRow
[pscustomobject]$newobj
}
else {$singleRows += $currentRow }
} | Export-Excel -Path $ExcelPath -PassThru -AutoSize -AutoFilter -AutoNameRange -BoldTopRow -WorksheetName $WorksheetName -Activate -ClearSheet #-MaxAutoSizeRows 10000
#endregion
#Put the subtotal rows in bold optionally hide rows where only one has the value of interest.
$ws = $excel.$WorksheetName
#We kept lists of the total rows Since 1 rows won't get expand/collapse we can hide them.
foreach ($r in $insertedrows) {$ws.Row($r).style.font.bold = $true }
if ($HideSingleRows) {
foreach ($r in $hideRows) { $ws.Row($r).hidden = $true}
}
$range = $ws.Dimension.Address
$ExcelPath = $excel.File.FullName
$SheetIndex = $ws.index
if ($NoOutline) {
Close-ExcelPackage $excel -show:$Show
return
}
else {
Close-ExcelPackage $excel
try { $excelApp = New-Object -ComObject "Excel.Application" }
catch { Write-Warning "Could not start Excel application - which usually means it is not installed." ; return }
try { $excelWorkBook = $excelApp.Workbooks.Open($ExcelPath) }
catch { Write-Warning -Message "Could not Open $ExcelPath." ; return }
$ws = $excelWorkBook.Worksheets.item($SheetIndex)
$null = $ws.Range($range).Select()
$null = $excelapp.ActiveCell.AutoOutline()
$null = $ws.Outline.ShowLevels(1,$null)
$excelWorkBook.Save()
if ($show) {$excelApp.Visible = $true}
else {
[void]$excelWorkBook.close()
$excelapp.Quit()
}
}
}
}

View File

@@ -0,0 +1,21 @@
try { Import-Module $PSScriptRoot\..\..\ImportExcel.psd1 } catch { throw ; return}
# This example is using Excel generated by Highlight-DiffCells.ps1
# The displayed rule should be the same as in the PS script
function Get-ConditionalFormatting {
param (
[string] $xlSourcefile
)
$excel = Open-ExcelPackage -Path $xlSourcefile
$excel.Workbook.Worksheets | ForEach-Object {
$wsNme = $_.Name
$_.ConditionalFormatting | ForEach-Object {
"Add-ConditionalFormatting -Worksheet `$excel[""$wsNme""] -Range '$($_.Address)' -ConditionValue '=$($_.Formula)' -RuleType $($_.Type) "
}
}
}
$xlSourcefile = "$PSScriptRoot\GetConditionalFormatting.xlsx"
Get-ConditionalFormatting -xlSourcefile $xlSourcefile

View File

@@ -0,0 +1,26 @@
try { Import-Module $PSScriptRoot\..\..\ImportExcel.psd1 } catch { throw ; return }
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
$data = ConvertFrom-Csv @"
Region,State,Units2021,Units2022
West,Texas,927,925
North,Tennessee,466,466
East,Florida,520,458
East,Maine,828,661
West,Virginia,465,465
North,Missouri,436,235
South,Kansas,214,214
North,North Dakota,789,640
South,Delaware,712,508
"@
$excel = $data | Export-Excel $xlSourcefile -AutoSize -PassThru
Add-ConditionalFormatting -Worksheet $excel.sheet1 -Range "C2:D10" -ConditionValue '=$C2=$D2' -RuleType Expression -BackgroundColor ([System.Drawing.Color]::Thistle) -Bold
Add-ConditionalFormatting -Worksheet $excel.sheet1 -Range "A2:D10" -ConditionValue '=$C2=$D2' -RuleType Expression -BackgroundColor ([System.Drawing.Color]::LavenderBlush)
Close-ExcelPackage $excel -Show

View File

@@ -0,0 +1,23 @@
# How to convert abbreviate or shorten long numbers in Excel
Remove-Item .\custom.xlsx -ErrorAction SilentlyContinue
$data = $(
12000
1000
2000
3000
2400
3600
6000
13000
40000
400000
1000000
)
$excel = $data | Export-Excel .\custom.xlsx -PassThru
Set-ExcelRange -Worksheet $excel.Sheet1 -Range "A:A" -NumberFormat '[>999999]#,,"M";#,"K"'
Close-ExcelPackage $excel -Show

View File

@@ -6,15 +6,16 @@
#>
param(
[Parameter(Mandatory=$true)]
$moduleName,
$moduleName = "ImportExcel",
[ValidateSet('Column','Bar','Line','Pie')]
$chartType="Line"
)
$galleryUrl = "https://www.powershellgallery.com/packages/$moduleName"
$nolegend = '-nolegend'
if($chartType -eq 'pie') {$nolegend = $null}
$code = "$($chartType)Chart (Get-HtmlTable $galleryUrl 0 | sort lastupdated -desc) -title 'Download stats for $moduleName' $nolegend"
$download = Get-HtmlTable "https://www.powershellgallery.com/packages/$moduleName" -FirstDataRow 1 |
Select-Object @{n="Version";e={$v = $Null ; if ($_.version -is [valuetype]) {[string][version]($_.version.tostring("0.0")) }
elseif ($_.version -is [string] -and [version]::TryParse($_.version.trim(),[ref]$v)) {$v}
else {$_.Version.trim() -replace "\s+"," " } }},
Downloads, @{n="LastUpdated";e={[datetime]$_.last_updated}} |
Sort-Object lastupdated -Descending
$code | Invoke-Expression
& "$($chartType)Chart" $download "Download stats for $moduleName" -nolegend:($chartype -ne 'pie')

View File

@@ -0,0 +1,10 @@
param(
[Alias('FullName')]
[String[]]$Path
)
if ($PSVersionTable.PSVersion.Major -gt 5 -and -not (Get-Command Format-Markdown -ErrorAction SilentlyContinue)) {
throw "This requires EZOut. Install-Module EZOut -AllowClobber -Scope CurrentUser"
}
Import-Excel $Path | Format-Markdown

View File

@@ -0,0 +1,10 @@
param(
[Alias('FullName')]
[String[]]$Path
)
if ($PSVersionTable.PSVersion.Major -gt 5 -and -not (Get-Command Format-YAML -ErrorAction SilentlyContinue)) {
throw "This requires EZOut. Install-Module EZOut -AllowClobber -Scope CurrentUser"
}
Import-Excel $Path | Format-YAML

View File

@@ -0,0 +1,11 @@
"OrderId","Category","Sales","Quantity","Discount"
"1","Cosmetics","744.01","7","0.7"
"2","Grocery","349.13","25","0.3"
"3","Apparels","535.11","88","0.2"
"4","Electronics","524.69","60","0.1"
"5","Electronics","439.1","41","0"
"6","Apparels","56.84","54","0.8"
"7","Electronics","326.66","97","0.7"
"8","Cosmetics","17.25","74","0.6"
"9","Grocery","199.96","39","0.4"
"10","Grocery","731.77","20","0.3"
1 OrderId Category Sales Quantity Discount
2 1 Cosmetics 744.01 7 0.7
3 2 Grocery 349.13 25 0.3
4 3 Apparels 535.11 88 0.2
5 4 Electronics 524.69 60 0.1
6 5 Electronics 439.1 41 0
7 6 Apparels 56.84 54 0.8
8 7 Electronics 326.66 97 0.7
9 8 Cosmetics 17.25 74 0.6
10 9 Grocery 199.96 39 0.4
11 10 Grocery 731.77 20 0.3

Binary file not shown.

View File

@@ -0,0 +1,13 @@
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
#Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
$PivotTableDefinition = New-PivotTableDefinition -Activate -PivotTableName Points `
-PivotRows Driver -PivotColumns Date -PivotData @{Points = "SUM"} -GroupDateColumn Date -GroupDatePart Years, Months
Import-Csv "$PSScriptRoot\First10Races.csv" |
Select-Object Race, @{n = "Date"; e = {[datetime]::ParseExact($_.date, "dd/MM/yyyy", (Get-Culture))}}, FinishPosition, Driver, GridPosition, Team, Points |
Export-Excel $xlSourcefile -Show -AutoSize -PivotTableDefinition $PivotTableDefinition

View File

@@ -0,0 +1,13 @@
try {Import-Module $PSScriptRoot\..\..\ImportExcel.psd1} catch {throw ; return}
#Get rid of pre-exisiting sheet
$xlSourcefile = "$env:TEMP\ImportExcelExample.xlsx"
Write-Verbose -Verbose -Message "Save location: $xlSourcefile"
Remove-Item $xlSourcefile -ErrorAction Ignore
$PivotTableDefinition = New-PivotTableDefinition -Activate -PivotTableName Places `
-PivotRows Driver -PivotColumns FinishPosition -PivotData @{Date = "Count"} -GroupNumericColumn FinishPosition -GroupNumericMin 1 -GroupNumericMax 25 -GroupNumericInterval 3
Import-Csv "$PSScriptRoot\First10Races.csv" |
Select-Object Race, @{n = "Date"; e = {[datetime]::ParseExact($_.date, "dd/MM/yyyy", (Get-Culture))}}, FinishPosition, Driver, GridPosition, Team, Points |
Export-Excel $xlSourcefile -Show -AutoSize -PivotTableDefinition $PivotTableDefinition

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,146 @@
function Import-ByColumns {
<#
.synopsis
Works like Import-Excel but with data in columns instead of the conventional rows.
.Description.
Import-excel will read the sample file in this folder like this
> Import-excel FruitCity.xlsx | ft *
GroupAs Apple Orange Banana
------- ----- ------ ------
London 1 4 9
Paris 2 4 10
NewYork 6 5 11
Munich 7 8 12
Import-ByColumns transposes it
> Import-Bycolumns FruitCity.xlsx | ft *
GroupAs London Paris NewYork Munich
------- ------ ----- ------- ------
Apple 1 2 6 7
Orange 4 4 5 8
Banana 9 10 11 12
.Example
C:\> Import-Bycolumns -path .\VM_Build_Example.xlsx -StartRow 7 -EndRow 21 -EndColumn 7 -HeaderName Desc,size,type,
cpu,ram,NetAcc,OS,OSDiskSize,DataDiskSize,LogDiskSize,TempDbDiskSize,BackupDiskSize,ImageDiskDize,AzureBackup,AzureReplication | ft -a *
This reads a spreadsheet which has a block from row 7 to 21 containing 14 properties of virtual machines.
The properties names are in column A and the 6 VMS are in columns B-G
Because the property names are written for easy reading by the person completing the spreadsheet, they are replaced with new names.
All the parameters work as they would for Import-Excel
#>
[Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSAvoidUsingPlainTextForPassword", "")]
param(
[Alias('FullName')]
[Parameter(ParameterSetName = "PathA", Mandatory, ValueFromPipelineByPropertyName, ValueFromPipeline, Position = 0 )]
[Parameter(ParameterSetName = "PathB", Mandatory, ValueFromPipelineByPropertyName, ValueFromPipeline, Position = 0 )]
[Parameter(ParameterSetName = "PathC", Mandatory, ValueFromPipelineByPropertyName, ValueFromPipeline, Position = 0 )]
[String]$Path,
[Parameter(ParameterSetName = "PackageA", Mandatory)]
[Parameter(ParameterSetName = "PackageB", Mandatory)]
[Parameter(ParameterSetName = "PackageC", Mandatory)]
[OfficeOpenXml.ExcelPackage]$ExcelPackage,
[Alias('Sheet')]
[Parameter(Position = 1)]
[ValidateNotNullOrEmpty()]
[String]$WorksheetName,
[Parameter(ParameterSetName = 'PathB' , Mandatory)]
[Parameter(ParameterSetName = 'PackageB', Mandatory)]
[String[]]$HeaderName ,
[Parameter(ParameterSetName = 'PathC' , Mandatory)]
[Parameter(ParameterSetName = 'PackageC', Mandatory)]
[Switch]$NoHeader,
[Alias('TopRow')]
[ValidateRange(1, 9999)]
[Int]$StartRow = 1,
[Alias('StopRow', 'BottomRow')]
[Int]$EndRow ,
[Alias('LeftColumn','LabelColumn')]
[Int]$StartColumn = 1,
[Int]$EndColumn,
[switch]$DataOnly,
[switch]$AsHash,
[ValidateNotNullOrEmpty()]
[String]$Password
)
function Get-PropertyNames {
<#
.SYNOPSIS
Create objects containing the row number and the row name for each of the different header types.
#>
[Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseSingularNouns', '', Justification = "Name would be incorrect, and command is not exported")]
param(
[Parameter(Mandatory)]
[Int[]]$Rows,
[Parameter(Mandatory)]
[Int]$StartColumn
)
if ($HeaderName) {
$i = 0
foreach ($h in $HeaderName) {
$h | Select-Object @{n='Row'; e={$rows[$i]}}, @{n='Value'; e={$h} }
$i++
}
}
elseif ($NoHeader) {
$i = 0
foreach ($r in $rows) {
$i++
$r | Select-Object @{n='Row'; e={$_}}, @{n='Value'; e={"P$i"} }
}
}
else {
foreach ($r in $Rows) {
#allow "False" or "0" to be headings
$Worksheet.Cells[$r, $StartColumn] | Where-Object {-not [string]::IsNullOrEmpty($_.Value) } | Select-Object @{n='Row'; e={$r} }, Value
}
}
}
#region open file if necessary, find worksheet and ensure we have start/end row/columns
if ($Path -and -not $ExcelPackage -and $Password) {
$ExcelPackage = Open-ExcelPackage -Path $Path -Password $Password
}
elseif ($Path -and -not $ExcelPackage ) {
$ExcelPackage = Open-ExcelPackage -Path $Path
}
if (-not $ExcelPackage) {
throw 'Could not get an Excel workbook to work on' ; return
}
if (-not $WorksheetName) { $Worksheet = $ExcelPackage.Workbook.Worksheets[1] }
elseif (-not ($Worksheet = $ExcelPackage.Workbook.Worksheets[$WorkSheetName])) {
throw "Worksheet '$WorksheetName' not found, the workbook only contains the worksheets '$($ExcelPackage.Workbook.Worksheets)'. If you only wish to select the first worksheet, please remove the '-WorksheetName' parameter." ; return
}
if (-not $EndRow ) { $EndRow = $Worksheet.Dimension.End.Row }
if (-not $EndColumn) { $EndColumn = $Worksheet.Dimension.End.Column }
#endregion
$Rows = $Startrow .. $EndRow ;
$Columns = (1 + $StartColumn)..$EndColumn
if ((-not $rows) -or (-not ($PropertyNames = Get-PropertyNames -Rows $Rows -StartColumn $StartColumn))) {
throw "No headers found in left coulmn '$Startcolumn'. "; return
}
if (-not $Columns) {
Write-Warning "Worksheet '$WorksheetName' in workbook contains no data in the rows after left column '$StartColumn'"
}
else {
foreach ($c in $Columns) {
$NewColumn = [Ordered]@{ }
foreach ($p in $PropertyNames) {
$NewColumn[$p.Value] = $Worksheet.Cells[$p.row,$c].text
}
if ($AsHash) {$NewColumn}
elseif (($NewColumn.Values -ne "") -or -not $dataonly) {[PSCustomObject]$NewColumn}
}
}
}

View File

@@ -0,0 +1,62 @@
<#
Excel VBA macro which changes all PivotTables in the workbook to Tabular form, disables subtotals and repeats item labels.
https://github.com/dfinke/ImportExcel/issues/1196#issuecomment-1156320581
#>
$ExcelFile = "$ENV:TEMP\test.xlsm"
Remove-Item -Path $ExcelFile -ErrorAction SilentlyContinue
$Macro = @"
Private Sub Workbook_Open()
'
' ChangePivotTables Macro
' Runs when the Excel workbook is opened.
'
' Changes all PivotTables in the workbook to Tabular form, repeats labels
' and disables Subtotals.
'
' Declare variables
Dim Ws As Worksheet
Dim Pt As PivotTable
Dim Pf As PivotField
' Disable screen updates
Application.ScreenUpdating = False
' Continue even if an error occurs
On Error Resume Next
For Each Ws In ActiveWorkbook.Worksheets
For Each Pt In Ws.PivotTables
Pt.RowAxisLayout xlTabularRow
Pt.RepeatAllLabels xlRepeatLabels
For Each Pf In Pt.PivotFields
Pf.Subtotals(1) = False
Next
Next
Next
Application.ScreenUpdating = True
End Sub
"@
$Data = ConvertFrom-Csv -InputObject @"
Region,Item,TotalSold
West,screwdriver,98
West,kiwi,19
North,kiwi,47
West,screws,48
West,avocado,52
East,avocado,40
South,drill,61
North,orange,92
South,drill,29
South,saw,36
"@
$ExcelPackage = $Data | Export-Excel -Path $ExcelFile -TableName "Sales" -WorksheetName "Sales" -AutoSize -PassThru
# Add Macro to the ThisWorkbook module
$ExcelPackage.Workbook.CreateVBAProject()
$VBAThisWorkbookModule = $ExcelPackage.Workbook.VbaProject.Modules | Where-Object -FilterScript { $_.Name -eq "ThisWorkbook" }
$VBAThisWorkbookModule.Code = $Macro
# Create PivotTable example
Add-PivotTable -PivotTableName "SalesPivot" -Address $ExcelPackage.Sales.Cells["E1"] -SourceWorksheet $ExcelPackage.Sales `
-SourceRange $ExcelPackage.Sales.Tables[0].Address -PivotRows "Region", "Item" -PivotData @{ "TotalSold" = "Sum" }
Close-ExcelPackage -ExcelPackage $ExcelPackage -Show

View File

@@ -1,52 +0,0 @@
Function Import-Bycolumns {
Param(
[Parameter(Mandatory=$true)]
[OfficeOpenXml.ExcelPackage]$ExcelPackage,
[Int]$StartRow = 1,
[String]$WorksheetName,
[Int]$EndRow ,
[Int]$StartColumn = 1,
[Int]$EndColumn
)
Function Get-RowNames {
[Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseSingularNouns', '', Justification = "Name would be incorrect, and command is not exported")]
param(
[Parameter(Mandatory)]
[Int[]]$Rows,
[Parameter(Mandatory)]
[Int]$StartColumn
)
foreach ($R in $Rows) {
#allow "False" or "0" to be headings
$Worksheet.Cells[$R, $StartColumn] | Where-Object {-not [string]::IsNullOrEmpty($_.Value) } | Select-Object @{N = 'Row'; E = { $R } }, Value
}
}
if (-not $WorksheetName) { $Worksheet = $ExcelPackage.Workbook.Worksheets[1] }
elseif (-not ($Worksheet = $ExcelPackage.Workbook.Worksheets[$WorkSheetName])) {
throw "Worksheet '$WorksheetName' not found, the workbook only contains the worksheets '$($ExcelPackage.Workbook.Worksheets)'. If you only wish to select the first worksheet, please remove the '-WorksheetName' parameter." ; return
}
if (-not $EndRow ) { $EndRow = $Worksheet.Dimension.End.Row }
if (-not $EndColumn) { $EndColumn = $Worksheet.Dimension.End.Column }
$Rows = $Startrow .. $EndRow ;
$Columns = (1 + $StartColumn)..$EndColumn
if ((-not $rows) -or (-not ($PropertyNames = Get-RowNames -Rows $Rows -StartColumn $StartColumn))) {
throw "No headers found in left coulmn '$Startcolumn'. "; return
}
if (-not $Columns) {
Write-Warning "Worksheet '$WorksheetName' in workbook contains no data in the rows after left column '$StartColumn'"
}
else {
foreach ($c in $Columns) {
$NewColumn = [Ordered]@{ }
foreach ($p in $PropertyNames) {
$NewColumn[$p.Value] = $Worksheet.Cells[$p.row,$c].text
}
[PSCustomObject]$NewColumn
}
}
}

View File

@@ -6,7 +6,7 @@
RootModule = 'ImportExcel.psm1'
# Version number of this module.
ModuleVersion = '7.5.2'
ModuleVersion = '7.8.2'
# ID used to uniquely identify this module
GUID = '60dd4136-feff-401a-ba27-a84458c57ede'
@@ -131,9 +131,8 @@ Check out the How To Videos https://www.youtube.com/watch?v=U3Ne_yX4tYo&list=PL5
'.\Charting\Charting.ps1',
'.\InferData\InferData.ps1',
'.\Pivot\Pivot.ps1',
'.\spikes\ConvertFrom-ExcelColumnName.ps1',
'.\Examples', '.\images', '.\Testimonials'
'.\Examples',
'.\Testimonials'
)
# Private data to pass to the module specified in RootModule/ModuleToProcess

View File

@@ -7,5 +7,5 @@ if (-not $fullPath) {
$fullPath = Join-Path $fullPath -ChildPath "ImportExcel"
}
Push-location $PSScriptRoot
Robocopy . $fullPath /mir /XD .vscode .git CI __tests__ data mdHelp /XF appveyor.yml azure-pipelines.yml .gitattributes .gitignore filelist.txt install.ps1 InstallModule.ps1
Robocopy . $fullPath /mir /XD .vscode images .git .github CI __tests__ data mdHelp spikes /XF README.md README.original.md appveyor.yml azure-pipelines.yml .gitattributes .gitignore filelist.txt install.ps1 InstallModule.ps1 PublishToGallery.ps1
Pop-Location

View File

@@ -118,7 +118,7 @@
Write-Warning -Message "The condition will look for the quotes at the start and end."
}
if ($PSBoundParameters.ContainsKey("ConditionValue" ) -and
$RuleType -match "Top|Botom" ) {$rule.Rank = $ConditionValue }
$RuleType -match "Top|Bottom" ) {$rule.Rank = $ConditionValue }
if ($PSBoundParameters.ContainsKey("ConditionValue" ) -and
$RuleType -match "StdDev" ) {$rule.StdDev = $ConditionValue }
if ($PSBoundParameters.ContainsKey("ConditionValue" ) -and

View File

@@ -18,8 +18,10 @@
[String]$PivotTotals = "Both",
[Switch]$NoTotalsInPivot,
[String]$GroupDateRow,
[String]$GroupDateColumn,
[OfficeOpenXml.Table.PivotTable.eDateGroupBy[]]$GroupDatePart,
[String]$GroupNumericRow,
[String]$GroupNumericColumn,
[double]$GroupNumericMin = 0 ,
[double]$GroupNumericMax = [Double]::MaxValue ,
[double]$GroupNumericInterval = 100 ,
@@ -139,11 +141,21 @@
if (-not $r ) {Write-Warning -Message "Could not find a Row field named '$GroupNumericRow'; no numeric grouping will be done."}
else {$r.AddNumericGrouping($GroupNumericMin, $GroupNumericMax, $GroupNumericInterval)}
}
elseif ($GroupNumericColumn) {
$c = $pivotTable.ColumnFields.Where( {$_.name -eq $GroupNumericColumn })
if (-not $c ) {Write-Warning -Message "Could not find a Column field named '$GroupNumericColumn'; no numeric grouping will be done."}
else {$c.AddNumericGrouping($GroupNumericMin, $GroupNumericMax, $GroupNumericInterval)}
}
if ($GroupDateRow -and $PSBoundParameters.ContainsKey("GroupDatePart")) {
$r = $pivotTable.RowFields.Where( {$_.name -eq $GroupDateRow })
if (-not $r ) {Write-Warning -Message "Could not find a Row field named '$GroupDateRow'; no date grouping will be done."}
else {$r.AddDateGrouping($GroupDatePart)}
}
elseif ($GroupDateColumn -and $PSBoundParameters.ContainsKey("GroupDatePart")) {
$c = $pivotTable.ColumnFields.Where( {$_.name -eq $GroupDateColumn })
if (-not $c ) {Write-Warning -Message "Could not find a Column field named '$GroupDateColumn'; no date grouping will be done."}
else {$c.AddDateGrouping($GroupDatePart)}
}
}
catch {Write-Warning -Message "Failed adding PivotTable '$pivotTableName': $_"}
}

View File

@@ -49,7 +49,7 @@ function Add-Worksheet {
}
else {$ExcelWorkbook.Worksheets.MoveBefore($WorksheetName, $MoveBefore)}
}
else {Write-Warning "Can't find worksheet '$MoveBefore'; worsheet '$WorksheetName' will not be moved."}
else {Write-Warning "Can't find worksheet '$MoveBefore'; worksheet '$WorksheetName' will not be moved."}
}
elseif ($MoveAfter ) {
if ($MoveAfter -eq "*") {
@@ -68,7 +68,7 @@ function Add-Worksheet {
$ExcelWorkbook.Worksheets.MoveAfter($WorksheetName, $MoveAfter)
}
}
else {Write-Warning "Can't find worksheet '$MoveAfter'; worsheet '$WorksheetName' will not be moved."}
else {Write-Warning "Can't find worksheet '$MoveAfter'; worksheet '$WorksheetName' will not be moved."}
}
#endregion
if ($Activate) {Select-Worksheet -ExcelWorksheet $ws }

View File

@@ -56,7 +56,7 @@
[Alias('Table')]
$TableName,
[OfficeOpenXml.Table.TableStyles]$TableStyle = [OfficeOpenXml.Table.TableStyles]::Medium6,
[Switch]$Barchart,
[Switch]$BarChart,
[Switch]$PieChart,
[Switch]$LineChart ,
[Switch]$ColumnChart ,

View File

@@ -16,6 +16,7 @@ function Get-ExcelFileSummary {
[PSCustomObject][Ordered]@{
ExcelFile = Split-Path -Leaf $Path
WorksheetName = $workSheet.Name
Visible = $workSheet.Hidden -eq 'Visible'
Rows = $workSheet.Dimension.Rows
Columns = $workSheet.Dimension.Columns
Address = $workSheet.Dimension.Address

View File

@@ -9,36 +9,75 @@ function Get-HtmlTable {
[int]$FirstDataRow=0,
[Switch]$UseDefaultCredentials
)
if ($PSVersionTable.PSVersion.Major -gt 5 -and -not (Get-Command ConvertFrom-Html -ErrorAction SilentlyContinue)) {
# Invoke-WebRequest on .NET core doesn't have ParsedHtml so we need HtmlAgilityPack or similiar Justin Grote's PowerHTML wraps that nicely
throw "This version of PowerShell needs the PowerHTML module to process HTML Tables."
}
$r = Invoke-WebRequest $Url -UseDefaultCredentials: $UseDefaultCredentials
$propertyNames = $Header
$table = $r.ParsedHtml.getElementsByTagName("table")[$TableIndex]
$propertyNames=$Header
$totalRows=@($table.rows).count
if ($PSVersionTable.PSVersion.Major -le 5) {
$table = $r.ParsedHtml.getElementsByTagName("table")[$TableIndex]
$totalRows=@($table.rows).count
for ($idx = $FirstDataRow; $idx -lt $totalRows; $idx++) {
for ($idx = $FirstDataRow; $idx -lt $totalRows; $idx++) {
$row = $table.rows[$idx]
$cells = @($row.cells)
$row = $table.rows[$idx]
$cells = @($row.cells)
if(!$propertyNames) {
if($cells[0].tagName -eq 'th') {
$propertyNames = @($cells | ForEach-Object {$_.innertext -replace ' ',''})
} else {
$propertyNames = @(1..($cells.Count + 2) | Foreach-Object { "P$_" })
if(!$propertyNames) {
if($cells[0].tagName -eq 'th') {
$propertyNames = @($cells | ForEach-Object {$_.innertext -replace ' ',''})
} else {
$propertyNames = @(1..($cells.Count + 2) | Foreach-Object { "P$_" })
}
continue
}
continue
$result = [ordered]@{}
for($counter = 0; $counter -lt $cells.Count; $counter++) {
$propertyName = $propertyNames[$counter]
if(!$propertyName) { $propertyName= '[missing]'}
$result.$propertyName= $cells[$counter].InnerText
}
[PSCustomObject]$result
}
$result = [ordered]@{}
for($counter = 0; $counter -lt $cells.Count; $counter++) {
$propertyName = $propertyNames[$counter]
if(!$propertyName) { $propertyName= '[missing]'}
$result.$propertyName= $cells[$counter].InnerText
}
else {
$h = ConvertFrom-Html -Content $r.Content
if ($TableIndex -is [valuetype]) { $TableIndex += 1}
$rows = $h.SelectNodes("//table[$TableIndex]//tr")
if (-not $rows) {Write-Warning "Could not find rows for `"//table[$TableIndex]`" in $Url ."}
if ( -not $propertyNames) {
if ( $tableHeaders = $rows[$FirstDataRow].SelectNodes("th")) {
$propertyNames = $tableHeaders.foreach({[System.Web.HttpUtility]::HtmlDecode( $_.innerText ) -replace '\W+','_' -replace '(\w)_+$','$1' })
$FirstDataRow += 1
}
else {
$c = 0
$propertyNames = $rows[$FirstDataRow].SelectNodes("td") | Foreach-Object { "P$c" ; $c ++ }
}
}
Write-Verbose ("Property names: " + ($propertyNames -join ","))
foreach ($n in $FirstDataRow..($rows.Count-1)) {
$r = $rows[$n].SelectNodes("td|th")
if ($r -and $r.innerText -ne "" -and $r.count -gt $rows[$n].SelectNodes("th").count ) {
$c = 0
$newObj = [ordered]@{}
foreach ($p in $propertyNames) {
$n = $null
#Join descentandts for cases where the text in the cell is split (e.g with a <BR> ). We also want to remove HTML codes, trim and convert unicode minus sign to "-"
$cellText = $r[$c].Descendants().where({$_.NodeType -eq "Text"}).foreach({[System.Web.HttpUtility]::HtmlDecode( $_.innerText ).Trim()}) -Join " " -replace "\u2212","-"
if ([double]::TryParse($cellText, [ref]$n)) {$newObj[$p] = $n }
else {$newObj[$p] = $cellText }
$c ++
}
[pscustomObject]$newObj
}
}
[PSCustomObject]$result
}
}

View File

@@ -23,7 +23,7 @@
[Parameter(ParameterSetName = 'PackageC', Mandatory)]
[Switch]$NoHeader ,
[Alias('HeaderRow', 'TopRow')]
[ValidateRange(1, 9999)]
[ValidateRange(1, 1048576)]
[Int]$StartRow = 1,
[Alias('StopRow', 'BottomRow')]
[Int]$EndRow ,
@@ -134,8 +134,16 @@
$xlBook = [Ordered]@{}
foreach ($sheet in $Worksheet) {
$EndRow = 0
$EndColumn = 0
if ($Worksheet.Count -gt 1 -or $Paths.Count -gt 1) {
<#
Needed under these conditions to handle sheets of different number of Row/Col
- When reading more than one xlsx file
- When reading more than one worksheet in the same file
#>
$EndRow = $null
$EndColumn = $null
}
$targetSheetname = $sheet.Name
$xlBook["$targetSheetname"] = @()
#region Get rows and columns
@@ -227,7 +235,13 @@
# Write-Verbose "Import cell '$($Worksheet.Cells[$R, $P.Column].Address)' with property name '$($p.Value)' and value '$($Worksheet.Cells[$R, $P.Column].Value)'."
}
}
$xlBook["$targetSheetname"] += [PSCustomObject]$NewRow
if ($WorksheetName -eq '*') {
$xlBook["$targetSheetname"] += [PSCustomObject]$NewRow
}
else {
[PSCustomObject]$NewRow
}
}
#endregion
}
@@ -239,16 +253,19 @@
# $EndColumn = 0
if ($Path) { $stream.close(); $ExcelPackage.Dispose() }
if ($Raw) {
foreach ($entry in $xlbook.GetEnumerator()) {
$entry.Value
if ($WorksheetName -eq '*') {
if ($Raw) {
foreach ($entry in $xlbook.GetEnumerator()) {
$entry.Value
}
}
elseif ($Worksheet.Count -eq 1) {
$xlBook["$targetSheetname"]
}
else {
$xlBook
}
}
elseif ($Worksheet.Count -eq 1) {
$xlBook["$targetSheetname"]
}
else {
$xlBook
}
}
}

View File

@@ -3,13 +3,13 @@ function Import-Html {
[CmdletBinding()]
param(
$Url,
$Index,
[int]$Index = 0,
$Header,
[int]$FirstDataRow=0,
[int]$FirstDataRow = 0,
[Switch]$UseDefaultCredentials
)
$xlFile = [System.IO.Path]::GetTempFileName() -replace "tmp","xlsx"
$xlFile = [System.IO.Path]::GetTempFileName() -replace "tmp", "xlsx"
Remove-Item $xlFile -ErrorAction Ignore
Write-Verbose "Exporting to Excel file $($xlFile)"

View File

@@ -16,8 +16,10 @@ function New-PivotTableDefinition {
[String]$PivotTotals = "Both",
[Switch]$NoTotalsInPivot,
[String]$GroupDateRow,
[String]$GroupDateColumn,
[OfficeOpenXml.Table.PivotTable.eDateGroupBy[]]$GroupDatePart,
[String]$GroupNumericRow,
[String]$GroupNumericColumn,
[double]$GroupNumericMin = 0 ,
[double]$GroupNumericMax = [Double]::MaxValue ,
[double]$GroupNumericInterval = 100 ,

View File

@@ -110,7 +110,7 @@
#region Apply formatting
$params = @{}
foreach ($p in @('Underline','Bold','Italic','StrikeThru', 'FontName', 'FontSize','FontShift','NumberFormat','TextRotation',
foreach ($p in @('Underline','UnderLineType','Bold','Italic','StrikeThru', 'FontName', 'FontSize','FontShift','NumberFormat','TextRotation',
'WrapText', 'HorizontalAlignment','VerticalAlignment', 'Autosize', 'Width', 'FontColor'
'BorderAround', 'BackgroundColor', 'BackgroundPattern', 'PatternColor')) {
if ($PSBoundParameters.ContainsKey($p)) {$params[$p] = $PSBoundParameters[$p]}

View File

@@ -58,7 +58,7 @@
elseif ($Worksheet -and ($Range -is [string] -or $Range -is [OfficeOpenXml.ExcelAddress])) {
$Range = $Worksheet.Cells[$Range]
}
elseif ($Range -is [string]) {Write-Warning -Message "The range pararameter you have specified also needs a worksheet parameter." ;return}
elseif ($Range -is [string]) {Write-Warning -Message "The range parameter you have specified also needs a worksheet parameter." ;return}
#else we assume $Range is a range.
if ($ClearAll) {
$Range.Clear()

1352
README.md

File diff suppressed because it is too large Load Diff

1253
README.original.md Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
#Requires -Modules Pester
[Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseDeclaredVarsMoreThanAssignments','',Justification='False Positives')]
[Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSAvoidAssignmentToAutomaticVariable','',Justification='Only executes on versions without the automatic variable')]
[Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseDeclaredVarsMoreThanAssignments', '', Justification = 'False Positives')]
[Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSAvoidAssignmentToAutomaticVariable', '', Justification = 'Only executes on versions without the automatic variable')]
param()
Describe ExportExcel -Tag "ExportExcel" {
BeforeAll {
@@ -8,7 +8,7 @@ Describe ExportExcel -Tag "ExportExcel" {
$WarningAction = "SilentlyContinue"
. "$PSScriptRoot\Samples\Samples.ps1"
if (-not (Get-command Get-Service -ErrorAction SilentlyContinue)) {
Function Get-Service {Import-Clixml $PSScriptRoot\Mockservices.xml}
Function Get-Service { Import-Clixml $PSScriptRoot\Mockservices.xml }
}
if (Get-process -Name Excel, xlim -ErrorAction SilentlyContinue) {
It "Excel is open" {
@@ -389,7 +389,7 @@ Describe ExportExcel -Tag "ExportExcel" {
}
}
Context "#Example 5 # Adding a single conditional format "{
Context "#Example 5 # Adding a single conditional format " {
BeforeEach {
#Test New-ConditionalText builds correctly
$ct = New-ConditionalText -ConditionalType GreaterThan 525 -ConditionalTextColor ([System.Drawing.Color]::DarkRed) -BackgroundColor ([System.Drawing.Color]::LightPink)
@@ -491,7 +491,7 @@ Describe ExportExcel -Tag "ExportExcel" {
}
}
Context "#Examples 8 & 9 # Adding Pivot tables and charts from parameters" {
Context "#Examples 8 & 9 # Adding Pivot tables and charts from parameters" {
BeforeAll {
$path = "TestDrive:\test.xlsx"
#Test -passthru and -worksheetName creating a new, named, sheet in an existing file.
@@ -544,7 +544,7 @@ Describe ExportExcel -Tag "ExportExcel" {
#Test appending data extends pivot chart (with a warning) .
$warnVar = $null
Get-Process | Select-Object -Last 20 -Property Name, cpu, pm, handles, company |
Export-Excel $path -WorkSheetname Processes -Append -IncludePivotTable -PivotRows Company -PivotData PM -IncludePivotChart -ChartType PieExploded3D -WarningAction SilentlyContinue -WarningVariable warnvar
Export-Excel $path -WorkSheetname Processes -Append -IncludePivotTable -PivotRows Company -PivotData PM -IncludePivotChart -ChartType PieExploded3D -WarningAction SilentlyContinue -WarningVariable warnvar
$Excel = Open-ExcelPackage $path
$pt = $Excel.Workbook.Worksheets["ProcessesPivotTable"].PivotTables[0]
@@ -557,12 +557,12 @@ Describe ExportExcel -Tag "ExportExcel" {
}
}
Context " # Add-Worksheet inserted sheets, moved them correctly, and copied a sheet" {
Context " # Add-Worksheet inserted sheets, moved them correctly, and copied a sheet" {
BeforeAll {
$path = "TestDrive:\test.xlsx"
#Test the -CopySource and -Movexxxx parameters for Add-Worksheet
$Excel = Get-Process | Select-Object -first 20 -Property Name, cpu, pm, handles, company |
Export-Excel $path -WorkSheetname Processes -IncludePivotTable -PivotRows Company -PivotData PM -NoTotalsInPivot -PivotDataToColumn -Activate
Export-Excel $path -WorkSheetname Processes -IncludePivotTable -PivotRows Company -PivotData PM -NoTotalsInPivot -PivotDataToColumn -Activate
$Excel = Open-ExcelPackage $path
#At this point Sheets Should be in the order Sheet1, Processes, ProcessesPivotTable
@@ -1081,4 +1081,55 @@ Describe ExportExcel -Tag "ExportExcel" {
}
}
}
}
Context " # Check UnderLineType" -Tag CheckUnderLineType {
BeforeAll {
$Path = Join-Path (Resolve-Path 'TestDrive:').ProviderPath "testUnderLineType.xlsx"
Remove-Item -Path $Path -ErrorAction SilentlyContinue
$data = "
Set-ExcelRange,Set-ExcelColumn
Should be double underlined,Should be double underlined
Should be double underlined,Should be double underlined
" | ConvertFrom-Csv
$data | Export-Excel $Path -AutoSize
$excel = Open-ExcelPackage $Path
$ws = $excel.Workbook.Worksheets["sheet1"]
Set-ExcelRange -Range $ws.Cells["A2:A3"] -Underline -UnderLineType "Double"
Set-ExcelColumn -Worksheet $ws -Column 2 -StartRow 2 -Underline -UnderLineType "Double"
Close-ExcelPackage $excel
}
AfterAll {
Remove-Item -Path $Path -ErrorAction SilentlyContinue
}
it "Check Cell Style Font via Set-ExcelColumn".PadRight(87) {
$excel = Open-ExcelPackage $Path
$cell = $excel.Sheet1.Cells["B2"]
$actual = $cell.Style.Font
$actual.Underline | Should -BeTrue
$actual.UnderlineType | Should -Be "Double"
Close-ExcelPackage $excel -NoSave
}
it "Check Cell Style Font via Set-ExcelRange".PadRight(87) {
$excel = Open-ExcelPackage $Path
$cell = $excel.Sheet1.Cells["A2"]
$actual = $cell.Style.Font
$actual.Underline | Should -BeTrue
$actual.UnderlineType | Should -Be "Double"
Close-ExcelPackage $excel -NoSave
}
}
}

View File

@@ -140,4 +140,72 @@ Describe "Creating small named ranges with hyperlinks" {
$pt.RowFields[1].Grouping.Interval | Should -Be 3
}
}
Context "Adding group date column" -Tag GroupColumnTests {
it "Tests adding a group date column" {
$xlFile = "TestDrive:\Results.xlsx"
Remove-Item $xlFile -ErrorAction Ignore
$PivotTableDefinition = New-PivotTableDefinition -Activate -PivotTableName Points `
-PivotRows Driver -PivotColumns Date -PivotData @{Points = "SUM" } -GroupDateColumn Date -GroupDatePart Years, Months
$excel = Import-Csv "$PSScriptRoot\First10Races.csv" |
Select-Object Race, @{n = "Date"; e = { [datetime]::ParseExact($_.date, "dd/MM/yyyy", (Get-Culture)) } }, FinishPosition, Driver, GridPosition, Team, Points |
Export-Excel $xlFile -AutoSize -PivotTableDefinition $PivotTableDefinition -PassThru
$excel.Workbook.Worksheets.Count | Should -Be 2
$excel.Workbook.Worksheets[1].Name | Should -BeExactly 'Sheet1'
$excel.Workbook.Worksheets[2].Name | Should -BeExactly 'Points'
$excel.Points.PivotTables.Count | Should -Be 1
$pt = $excel.Points.PivotTables[0]
$pt.RowFields.Count | Should -Be 1
$pt.RowFields[0].name | Should -Be "Driver"
$pt.ColumnFields.Count | Should -Be 2
$pt.ColumnFields[0].name | Should -Be "Years"
$pt.ColumnFields[0].Grouping | Should -Not -BeNullOrEmpty
$pt.ColumnFields[0].Grouping.GroupBy | Should -Be "Years"
$pt.ColumnFields[1].name | Should -Be "Date"
$pt.ColumnFields[1].Grouping | Should -Not -BeNullOrEmpty
$pt.ColumnFields[1].Grouping.GroupBy | Should -Be "Months"
Close-ExcelPackage $excel
Remove-Item $xlFile -ErrorAction Ignore
}
}
Context "Adding group numeric column" -Tag GroupColumnTests {
it "Tests adding numeric group column" {
$xlFile = "TestDrive:\Results.xlsx"
Remove-Item $xlFile -ErrorAction Ignore
$PivotTableDefinition = New-PivotTableDefinition -Activate -PivotTableName Places `
-PivotRows Driver -PivotColumns FinishPosition -PivotData @{Date = "Count" } -GroupNumericColumn FinishPosition -GroupNumericMin 1 -GroupNumericMax 25 -GroupNumericInterval 3
$excel = Import-Csv "$PSScriptRoot\First10Races.csv" |
Select-Object Race, @{n = "Date"; e = { [datetime]::ParseExact($_.date, "dd/MM/yyyy", (Get-Culture)) } }, FinishPosition, Driver, GridPosition, Team, Points |
Export-Excel $xlFile -AutoSize -PivotTableDefinition $PivotTableDefinition -PassThru
$excel.Workbook.Worksheets.Count | Should -Be 2
$excel.Workbook.Worksheets[1].Name | Should -BeExactly 'Sheet1'
$excel.Workbook.Worksheets[2].Name | Should -BeExactly 'Places'
$excel.Places.PivotTables.Count | Should -Be 1
$pt = $excel.Places.PivotTables[0]
$pt.RowFields.Count | Should -Be 1
$pt.RowFields[0].name | Should -Be "Driver"
$pt.ColumnFields.Count | Should -Be 1
$pt.ColumnFields[0].name | Should -Be "FinishPosition"
$pt.ColumnFields[0].Grouping | Should -Not -BeNullOrEmpty
$pt.ColumnFields[0].Grouping.Start | Should -Be 1
$pt.ColumnFields[0].Grouping.End | Should -Be 25
$pt.ColumnFields[0].Grouping.Interval | Should -Be 3
Close-ExcelPackage $excel
Remove-Item $xlFile -ErrorAction Ignore
}
}
}

View File

@@ -3,9 +3,7 @@
[Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSAvoidAssignmentToAutomaticVariable', '', Justification = 'Only executes on versions without the automatic variable')]
param()
if (-not (Get-command Import-Excel -ErrorAction SilentlyContinue)) {
Import-Module $PSScriptRoot\..\ImportExcel.psd1
}
Import-Module $PSScriptRoot\..\ImportExcel.psd1 -Force
Describe 'All tests for Get-ExcelFileSummary' -Tag "Get-ExcelFileSummary" {
Context "Test Get-ExcelFileSummary" {
@@ -14,6 +12,7 @@ Describe 'All tests for Get-ExcelFileSummary' -Tag "Get-ExcelFileSummary" {
$actual.ExcelFile | Should -BeExactly 'TestData1.xlsx'
$actual.WorksheetName | Should -BeExactly 'Sheet1'
$actual.Visible | Should -BeTrue
$actual.Rows | Should -Be 3
$actual.Columns | Should -Be 2
$actual.Address | Should -BeExactly 'A1:B3'
@@ -26,6 +25,7 @@ Describe 'All tests for Get-ExcelFileSummary' -Tag "Get-ExcelFileSummary" {
$actual[0].ExcelFile | Should -BeExactly 'MultipleSheets.xlsx'
$actual[0].WorksheetName | Should -BeExactly 'Sheet1'
$actual[0].Visible | Should -BeTrue
$actual[0].Rows | Should -Be 1
$actual[0].Columns | Should -Be 4
$actual[0].Address | Should -BeExactly 'A1:D1'
@@ -33,11 +33,20 @@ Describe 'All tests for Get-ExcelFileSummary' -Tag "Get-ExcelFileSummary" {
$actual[1].ExcelFile | Should -BeExactly 'MultipleSheets.xlsx'
$actual[1].WorksheetName | Should -BeExactly 'Sheet2'
$actual[1].Visible | Should -BeTrue
$actual[1].Rows | Should -Be 2
$actual[1].Columns | Should -Be 2
$actual[1].Address | Should -BeExactly 'A1:B2'
$actual[1].Path | Should -Not -BeNullOrEmpty
}
It "Tests if sheet is hidden or not" {
$actual = Get-ExcelFileSummary "$PSScriptRoot\ImportExcelTests\SheetVisibleTesting.xlsx"
$actual[0].Visible | Should -BeTrue
$actual[1].Visible | Should -BeFalse
$actual[2].Visible | Should -BeTrue
$actual[3].Visible | Should -BeFalse
}
}
}

Binary file not shown.

View File

@@ -0,0 +1,57 @@
Import-Module $PSScriptRoot\..\..\ImportExcel.psd1 -Force
Describe 'Test' -Tag ImportExcelEndRowAndCols {
BeforeAll {
$script:xlFilename = "$PSScriptRoot\DataInDiffRowCol.xlsx"
}
Context 'Test reading a partial sheet' {
It 'Should read 2 rows and first 3 columns' {
$actual = Import-Excel $xlFilename -StartRow 5 -EndRow 7 -StartColumn 3 -EndColumn 5
# $actual | out-host
$actual.Count | Should -Be 2
$colNames = $actual[0].psobject.properties.Name
$colNames.Count | Should -Be 3
$colNames[0] | Should -Be 'Region'
$colNames[1] | Should -Be 'State'
$colNames[2] | Should -Be 'Units'
}
It 'Should read second 2 rows and last 2 columns' {
$actual = Import-Excel $xlFilename -StartRow 8 -EndRow 9 -StartColumn 5 -EndColumn 6 -HeaderName 'Units', 'Price'
# $actual | out-host
$actual.Count | Should -Be 2
$colNames = $actual[0].psobject.properties.Name
$colNames.Count | Should -Be 2
$colNames[0] | Should -Be 'Units'
$colNames[1] | Should -Be 'Price'
}
It 'Should read any row up to maximum allowed row' {
$xlMaxRows = "$PSScriptRoot\MaxRows.xlsx"
$actual = Import-Excel $xlMaxRows -StartRow 1048576 -EndRow 1048576 -NoHeader
$actual.P1 | Should -Be 1048576
}
}
Context 'Test reading multiple sheets with data in differnt rows and columns' {
It 'Should read 2 sheets same StartRow different dimensions' {
$xlFilename = "$PSScriptRoot\DataInDiffRowColMultipleSheets.xlsx"
$actual = Import-Excel $xlFilename -StartRow 5 -WorksheetName *
$actual.Keys.Count | Should -Be 2
$actual.Contains('Sheet1') | Should -BeTrue
$actual.Contains('Sheet2') | Should -BeTrue
$actual['Sheet1'].Count | Should -Be 9
$actual['Sheet2'].Count | Should -Be 12
}
}
}

View File

@@ -0,0 +1,12 @@
Import-Module $PSScriptRoot\..\..\ImportExcel.psd1 -Force
Describe "Tests Import-Excel Timings" -Tag Timing {
It "Should read the 20k xlsx in -le 2100 milliseconds" {
$timer = Measure-Command {
$data = Import-Excel $PSScriptRoot\TimingRows20k.xlsx
}
$timer.TotalMilliseconds | Should -BeLessOrEqual 2100
$data.Count | Should -Be 19999
}
}

Binary file not shown.

View File

@@ -3,7 +3,7 @@ Param()
Import-Module $PSScriptRoot\..\..\ImportExcel.psd1 -Force
Describe "Test reading multiple XLSX files of differernt row count" -Tag ReadMultipleXLSX {
Describe "Test reading multiple XLSX files of different row count" -Tag ReadMultipleXLSX {
It "Should find these xlsx files" {
Test-Path -Path $PSScriptRoot\rows05.xlsx | Should -BeTrue
Test-Path -Path $PSScriptRoot\rows10.xlsx | Should -BeTrue

Binary file not shown.

Binary file not shown.

View File

@@ -1,3 +1,50 @@
# 7.8.2
- Fix docs [#1254](https://github.com/dfinke/ImportExcel/pull/1251)`Add-Worksheet` warning. Thank you [Wilson Stewart](https://github.com/WilsonStewart)
- Fix docs [#1251](https://github.com/dfinke/ImportExcel/pull/1251)`Add-Worksheet` warning. Thank you [Jeremiah Adams](https://github.com/JeremiahTheFirst)
- Fix docs [#1253](https://github.com/dfinke/ImportExcel/pull/1253) `convertfrom-exceltosqlinsert`. Thank you [Wes Stahler](https://github.com/stahler)
- Set Validate Range for rows to max rows available [#1273](https://github.com/dfinke/ImportExcel/pull/1273). Thank you [Stephen Brown](https://github.com/steve-daedilus)
- Extended Get-ExcelFileSummary to include more Visible -eq $true|$false
# 7.8.1
- Fixed conditional formatting so it recognizes 'Top and Bottom' as a rule type. Thanks [g-pearl](https://github.com/g-pearl)
* Update open-excelpackage.md. Thanks [stahler](https://github.com/stahler)
- Added Group Column tests
# 7.8.0
Thanks [James O'Neill](https://github.com/jhoneill)
- Updated example Get-ModuleStats that extracts module statistics on the PowerShell Gallery.
- Added GroupNumericColumn and GroupDateColumn to New-PivotTableDefinition and Add-PivotTable.
|GroupNumericColumn|GroupDateColumn|
|:---:|:---:|
|![](images/GroupNumericColumn.png)|![](images/GroupDateColumn.png)|
# Example added
Thank you [@kkazala](https://github.com/kkazala)
- Added an example reading a sheet, extracting the `ConditionalFormatting` and generating the PowerShell statements so you can re-create them.
- Added an example showing `ConditionalFormatting` using the `RuleType` `Expression` with a formula
- [Highlight-DiffCells.ps1](https://github.dev/kkazala/ImportExcel/blob/b53881fd023c052da1acc7812511da223bb2e40c/Examples/ConditionalFormatting/Highlight-DiffCells.ps1)
# 7.7.0
- Fix a bug with `-UnderLineType parameter is ignored in Set-ExcelColumn` [#1204](https://github.com/dfinke/ImportExcel/issues/1204)
# 7.6.0
- **_[Under investigation]_** Fix -StartRow and -StartColumn being ignored.
- James O'Neill:
- Update Get-HtmlTable to support to use PowerHTML (maintained by [Justin Grote](https://twitter.com/JustinWGrote)).
- Added example to including a new function Import-ByColumn. Works like Import-Excel but with data in columns instead of the conventional rows.
- Update Import-HTML with better defaults
- Fixed example `Get-ModuleStats.ps1` which reads the PowerShell Gallery page and extracts the stats table
# v7.5.2
- Changed the switch `-NotAsDictionary` to `-Raw`. Works with `-Worksheetname *` reads all the sheets in the xlsx file and returns an array.

BIN
images/GroupDateColumn.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

BIN
images/SalesData.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

BIN
images/SalesDataChart.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 238 KiB

BIN
images/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

BIN
images/logoWithInstall.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

View File

@@ -331,6 +331,22 @@ Accept pipeline input: False
Accept wildcard characters: False
```
### -GroupDateColumn
The name of a Column field which should be grouped by parts of the date/time \(ignored if GroupDateRow is not specified\)
```yaml
Type: String
Parameter Sets: (All)
Aliases:
Required: False
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
```
### -GroupDatePart
The Part\(s\) of the date to use in the grouping \(ignored if GroupDateRow is not specified\)
@@ -364,6 +380,22 @@ Accept pipeline input: False
Accept wildcard characters: False
```
### -GroupNumericColumn
The name of a Column field which should be grouped by Number \(e.g. 0-99, 100-199, 200-299 \)
```yaml
Type: String
Parameter Sets: (All)
Aliases:
Required: False
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
```
### -GroupNumericMin
The starting point for grouping

View File

@@ -137,7 +137,7 @@ Accept wildcard characters: False
### -Header
Specifies custom property names to use, instead of the values defined in the column headers of the TopRow. If you provide fewr header names than there is data in the worksheet, then only the data with a corresponding header name will be imported and the data without header name will be disregarded. If you provide more header names than there is data in the worksheet, then all data will be imported and all objects will have all the property names you defined in the header names. As such, the last properties will be blank as there is no data for them.
Specifies custom property names to use, instead of the values defined in the column headers of the TopRow. If you provide fewer header names than there is data in the worksheet, then only the data with a corresponding header name will be imported and the data without header name will be disregarded. If you provide more header names than there is data in the worksheet, then all data will be imported and all objects will have all the property names you defined in the header names. As such, the last properties will be blank as there is no data for them.
```yaml
Type: String[]

View File

@@ -225,6 +225,22 @@ Accept pipeline input: False
Accept wildcard characters: False
```
### -GroupDateColumn
The name of a column field which should be grouped by parts of the date/time \(ignored if GroupDatePart is not specified\)
```yaml
Type: String
Parameter Sets: (All)
Aliases:
Required: False
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
```
### -GroupDatePart
The Part\(s\) of the date to use in the grouping \(ignored if GroupDateRow is not specified\)
@@ -234,7 +250,6 @@ Type: eDateGroupBy[]
Parameter Sets: (All)
Aliases:
Accepted values: Years, Quarters, Months, Days, Hours, Minutes, Seconds
Required: False
Position: Named
Default value: None
@@ -250,7 +265,6 @@ The name of a row field which should be grouped by Number \(e.g 0-99, 100-199, 2
Type: String
Parameter Sets: (All)
Aliases:
Required: False
Position: Named
Default value: None
@@ -258,6 +272,23 @@ Accept pipeline input: False
Accept wildcard characters: False
```
### -GroupNumericColumn
The name of a column field which should be grouped by Number \(e.g 0-99, 100-199, 200-299 \)
```yaml
Type: String
Parameter Sets: (All)
Aliases:
Required: False
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
```
### -GroupNumericMin
The starting point for grouping

View File

@@ -39,13 +39,13 @@ This will create a new file in the temp folder if it doesn't already exist. It t
### EXAMPLE 2
```text
PS\> $excela= Open-ExcelPackage -path "$xlPath" -Password $password
PS\> $sheet1 = $excel.Workbook.Worksheetsa"sheet1" ]
PS\> $excel= Open-ExcelPackage -path "$xlPath" -Password $password
PS\> $sheet1 = $excel.Workbook.Worksheets["sheet1"]
PS\> Set-ExcelRange -Range $sheet1.Cells ["E1:S1048576" ], $sheet1.Cells ["V1:V1048576" ] -NFormat ( [cultureinfo ]::CurrentCulture.DateTimeFormat.ShortDatePattern)
PS\> Close-ExcelPackage $excel -Show
```
This will open the password protected file at $xlPath using the password stored in $Password. Sheet1 is selected and formatting applied to two blocks of the sheet; then the file is and saved and loaded into Excel.
This will open the password protected file at $xlPath using the password stored in $Password. Sheet1 is selected and formatting applied to two blocks of the sheet; then the file is saved and loaded into Excel.
## PARAMETERS