mirror of
https://github.com/dfinke/ImportExcel.git
synced 2025-12-10 13:23:29 +00:00
Compare commits
53 Commits
v7.8.4
...
copilot/fi
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6fa98b78b5 | ||
|
|
debda51198 | ||
|
|
0c1829840d | ||
|
|
5387c06146 | ||
|
|
45ed6a06dc | ||
|
|
fa447a745c | ||
|
|
49affcfba7 | ||
|
|
dc4a5e9db9 | ||
|
|
85e48acf36 | ||
|
|
fb41d3de83 | ||
|
|
db84a59dd0 | ||
|
|
5a61c5dda4 | ||
|
|
a2bc50aeb0 | ||
|
|
fa907da4a4 | ||
|
|
24c205e65d | ||
|
|
a1418a336e | ||
|
|
63683db543 | ||
|
|
36b5495bd5 | ||
|
|
722516de7c | ||
|
|
57bb049111 | ||
|
|
74cbca8b2f | ||
|
|
53712d4f7f | ||
|
|
98e2ac96ea | ||
|
|
efa73b37a0 | ||
|
|
c1b395fac6 | ||
|
|
0d8d125222 | ||
|
|
f77ee7b060 | ||
|
|
8ff1757c06 | ||
|
|
ab526558a3 | ||
|
|
61744012cd | ||
|
|
2cb4712bc5 | ||
|
|
6847a49baa | ||
|
|
b8a8f4c565 | ||
|
|
edf25cf946 | ||
|
|
77ec946b84 | ||
|
|
637c11c2e6 | ||
|
|
cd2a70197c | ||
|
|
d99bd8fc9e | ||
|
|
23f1d92c1b | ||
|
|
ab4d03c984 | ||
|
|
ca4dfb7040 | ||
|
|
a9eca05303 | ||
|
|
195efdea54 | ||
|
|
24e5fccafe | ||
|
|
840870df11 | ||
|
|
0fe6654233 | ||
|
|
7598b75538 | ||
|
|
ed6c87e8de | ||
|
|
2642211e12 | ||
|
|
9373765e10 | ||
|
|
16820a30c4 | ||
|
|
438d7e2b03 | ||
|
|
c617d96322 |
3
.github/workflows/ci.yml
vendored
3
.github/workflows/ci.yml
vendored
@@ -3,8 +3,11 @@ on:
|
||||
branches:
|
||||
- master
|
||||
- Set-up-GHA-CI/CD
|
||||
paths-ignore:
|
||||
- 'Examples/**'
|
||||
|
||||
pull_request:
|
||||
|
||||
|
||||
jobs:
|
||||
validate:
|
||||
|
||||
35
Examples/Charts/ChartDataSeparatePage.ps1
Normal file
35
Examples/Charts/ChartDataSeparatePage.ps1
Normal file
@@ -0,0 +1,35 @@
|
||||
$data = ConvertFrom-Csv @"
|
||||
Region,State,Units,Price
|
||||
West,Texas,927,923.71
|
||||
North,Tennessee,466,770.67
|
||||
East,Florida,520,458.68
|
||||
East,Maine,828,661.24
|
||||
West,Virginia,465,053.58
|
||||
North,Missouri,436,235.67
|
||||
South,Kansas,214,992.47
|
||||
North,North Dakota,789,640.72
|
||||
South,Delaware,712,508.55
|
||||
"@
|
||||
|
||||
$xlfile = "$PSScriptRoot\spike.xlsx"
|
||||
Remove-Item $xlfile -ErrorAction SilentlyContinue
|
||||
|
||||
$xlpkg = $data | Export-Excel $xlfile -WorksheetName Data -AutoNameRange -PassThru
|
||||
|
||||
$null = Add-Worksheet -ExcelPackage $xlpkg -WorksheetName Summary -Activate
|
||||
|
||||
$params = @{
|
||||
Worksheet = $xlpkg.Summary
|
||||
Title = "Sales by Region"
|
||||
ChartType = 'ColumnClustered'
|
||||
|
||||
# XRange = "Data!A2:A10"
|
||||
# YRange = "Data!C2:C10"
|
||||
|
||||
XRange = 'Data!Region'
|
||||
YRange = 'Data!Units'
|
||||
}
|
||||
|
||||
Add-ExcelChart @params
|
||||
|
||||
Close-ExcelPackage $xlpkg -Show
|
||||
@@ -6,7 +6,7 @@
|
||||
RootModule = 'ImportExcel.psm1'
|
||||
|
||||
# Version number of this module.
|
||||
ModuleVersion = '7.8.4'
|
||||
ModuleVersion = '7.8.10'
|
||||
|
||||
# ID used to uniquely identify this module
|
||||
GUID = '60dd4136-feff-401a-ba27-a84458c57ede'
|
||||
@@ -54,6 +54,7 @@ Check out the How To Videos https://www.youtube.com/watch?v=U3Ne_yX4tYo&list=PL5
|
||||
'Export-Excel',
|
||||
'Export-ExcelSheet',
|
||||
'Get-ExcelColumnName',
|
||||
'Get-ExcelFileSchema',
|
||||
'Get-ExcelFileSummary',
|
||||
'Get-ExcelSheetDimensionAddress',
|
||||
'Get-ExcelSheetInfo',
|
||||
@@ -122,8 +123,7 @@ Check out the How To Videos https://www.youtube.com/watch?v=U3Ne_yX4tYo&list=PL5
|
||||
'.\GetExcelTable.ps1',
|
||||
'.\ImportExcel.psd1',
|
||||
'.\ImportExcel.psm1',
|
||||
'.\LICENSE.txt',
|
||||
'.\README.md',
|
||||
'.\LICENSE.txt',
|
||||
'.\Plot.ps1',
|
||||
'.\Private',
|
||||
'.\Public',
|
||||
@@ -150,7 +150,7 @@ Check out the How To Videos https://www.youtube.com/watch?v=U3Ne_yX4tYo&list=PL5
|
||||
Tags = @("Excel", "EPPlus", "Export", "Import")
|
||||
|
||||
# The web address of an icon which can be used in galleries to represent this module
|
||||
#IconUri = "http://pesterbdd.com/images/Pester.png"
|
||||
#IconUri =
|
||||
|
||||
# The web address of this module's project or support homepage.
|
||||
ProjectUri = "https://github.com/dfinke/ImportExcel"
|
||||
@@ -215,4 +215,4 @@ Check out the How To Videos https://www.youtube.com/watch?v=U3Ne_yX4tYo&list=PL5
|
||||
# Default prefix for commands exported from this module. Override the default prefix using Import-Module -Prefix.
|
||||
# DefaultCommandPrefix = ''
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -67,9 +67,8 @@ function WorksheetArgumentCompleter {
|
||||
param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameter)
|
||||
$xlPath = $fakeBoundParameter['Path']
|
||||
if (Test-Path -Path $xlPath) {
|
||||
$xlpkg = Open-ExcelPackage -ReadOnly -Path $xlPath
|
||||
$WorksheetNames = $xlPkg.Workbook.Worksheets.Name
|
||||
Close-ExcelPackage -nosave -ExcelPackage $xlpkg
|
||||
$xlSheet = Get-ExcelSheetInfo -Path $xlPath
|
||||
$WorksheetNames = $xlSheet.Name
|
||||
$WorksheetNames.where( { $_ -like "*$wordToComplete*" }) | foreach-object {
|
||||
New-Object -TypeName System.Management.Automation.CompletionResult -ArgumentList "'$_'",
|
||||
$_ , ([System.Management.Automation.CompletionResultType]::ParameterValue) , $_
|
||||
|
||||
@@ -113,6 +113,57 @@ function Add-ExcelChart {
|
||||
if ($null -ne $XMinValue) { $chart.XAxis.MinValue = $XMinValue }
|
||||
if ($null -ne $XMaxValue) { $chart.XAxis.MaxValue = $XMaxValue }
|
||||
if ($XAxisNumberformat) { $chart.XAxis.Format = (Expand-NumberFormat $XAxisNumberformat) }
|
||||
|
||||
# Fix for category axis (used in line charts, etc.): EPPlus doesn't serialize MajorUnit/MinorUnit to XML for category axes
|
||||
# We need to manually add these elements to the XML if they were specified
|
||||
if ($XMajorUnit -or $XMinorUnit) {
|
||||
$chartXml = $chart.ChartXml
|
||||
$nsManager = New-Object System.Xml.XmlNamespaceManager($chartXml.NameTable)
|
||||
$null = $nsManager.AddNamespace("c", "http://schemas.openxmlformats.org/drawingml/2006/chart")
|
||||
$catAx = $chartXml.SelectSingleNode("//c:catAx", $nsManager)
|
||||
|
||||
if ($catAx) {
|
||||
# Category axis exists - need to add majorUnit/minorUnit elements
|
||||
if ($XMajorUnit) {
|
||||
$existingMajorUnit = $catAx.SelectSingleNode("c:majorUnit", $nsManager)
|
||||
if (-not $existingMajorUnit) {
|
||||
$majorUnitElement = $chartXml.CreateElement("c", "majorUnit", "http://schemas.openxmlformats.org/drawingml/2006/chart")
|
||||
$null = $majorUnitElement.SetAttribute("val", $XMajorUnit)
|
||||
# Insert after scaling element or at the beginning
|
||||
$scalingNode = $catAx.SelectSingleNode("c:scaling", $nsManager)
|
||||
if ($scalingNode) {
|
||||
$null = $catAx.InsertAfter($majorUnitElement, $scalingNode)
|
||||
} else {
|
||||
$null = $catAx.PrependChild($majorUnitElement)
|
||||
}
|
||||
} else {
|
||||
$null = $existingMajorUnit.SetAttribute("val", $XMajorUnit)
|
||||
}
|
||||
}
|
||||
|
||||
if ($XMinorUnit) {
|
||||
$existingMinorUnit = $catAx.SelectSingleNode("c:minorUnit", $nsManager)
|
||||
if (-not $existingMinorUnit) {
|
||||
$minorUnitElement = $chartXml.CreateElement("c", "minorUnit", "http://schemas.openxmlformats.org/drawingml/2006/chart")
|
||||
$null = $minorUnitElement.SetAttribute("val", $XMinorUnit)
|
||||
# Insert after majorUnit if it exists, otherwise after scaling
|
||||
$majorUnitNode = $catAx.SelectSingleNode("c:majorUnit", $nsManager)
|
||||
if ($majorUnitNode) {
|
||||
$null = $catAx.InsertAfter($minorUnitElement, $majorUnitNode)
|
||||
} else {
|
||||
$scalingNode = $catAx.SelectSingleNode("c:scaling", $nsManager)
|
||||
if ($scalingNode) {
|
||||
$null = $catAx.InsertAfter($minorUnitElement, $scalingNode)
|
||||
} else {
|
||||
$null = $catAx.PrependChild($minorUnitElement)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$null = $existingMinorUnit.SetAttribute("val", $XMinorUnit)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($YAxisTitleText) {
|
||||
$chart.YAxis.Title.Text = $YAxisTitleText
|
||||
|
||||
@@ -8,7 +8,8 @@ function ConvertFrom-ExcelData {
|
||||
[ScriptBlock]$ScriptBlock,
|
||||
[Alias("Sheet")]
|
||||
$WorksheetName = 1,
|
||||
[int]$HeaderRow = 1,
|
||||
[Alias('HeaderRow', 'TopRow')]
|
||||
[int]$StartRow = 1,
|
||||
[string[]]$Header,
|
||||
[switch]$NoHeader,
|
||||
[switch]$DataOnly
|
||||
|
||||
@@ -45,11 +45,18 @@ function ConvertTo-ExcelXlsx {
|
||||
throw "Could not create Excel.Application ComObject. Please verify that Excel is installed."
|
||||
}
|
||||
|
||||
$Excel.Visible = $false
|
||||
$null = $Excel.Workbooks.Open($xlsFile.FullName)
|
||||
$Excel.ActiveWorkbook.SaveAs($xlsxPath, $xlFixedFormat)
|
||||
$Excel.ActiveWorkbook.Close()
|
||||
$Excel.Quit()
|
||||
try {
|
||||
$Excel.Visible = $false
|
||||
$null = $Excel.Workbooks.Open($xlsFile.FullName, $null, $true)
|
||||
$Excel.ActiveWorkbook.SaveAs($xlsxPath, $xlFixedFormat)
|
||||
}
|
||||
finally {
|
||||
if ($null -ne $Excel.ActiveWorkbook) {
|
||||
$Excel.ActiveWorkbook.Close()
|
||||
}
|
||||
|
||||
$Excel.Quit()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -79,6 +79,7 @@
|
||||
[Switch]$NoAliasOrScriptPropeties,
|
||||
[Switch]$DisplayPropertySet,
|
||||
[String[]]$NoNumberConversion,
|
||||
[String[]]$NoHyperLinkConversion,
|
||||
[Object[]]$ConditionalFormat,
|
||||
[Object[]]$ConditionalText,
|
||||
[Object[]]$Style,
|
||||
@@ -318,7 +319,9 @@
|
||||
$ws.Cells[$row, $ColumnIndex].Value = $v
|
||||
if ($setNumformat) { $ws.Cells[$row, $ColumnIndex].Style.Numberformat.Format = $Numberformat }
|
||||
}
|
||||
elseif ($v -is [uri] ) {
|
||||
elseif ($v -is [uri] -and
|
||||
$NoHyperLinkConversion -ne '*' -and
|
||||
$NoHyperLinkConversion -notcontains $Name ) {
|
||||
$ws.Cells[$row, $ColumnIndex].HyperLink = $v
|
||||
$ws.Cells[$row, $ColumnIndex].Style.Font.Color.SetColor([System.Drawing.Color]::Blue)
|
||||
$ws.Cells[$row, $ColumnIndex].Style.Font.UnderLine = $true
|
||||
@@ -331,7 +334,10 @@
|
||||
$ws.Cells[$row, $ColumnIndex].Formula = ($v -replace '^=', '')
|
||||
if ($setNumformat) { $ws.Cells[$row, $ColumnIndex].Style.Numberformat.Format = $Numberformat }
|
||||
}
|
||||
elseif ( [System.Uri]::IsWellFormedUriString($v , [System.UriKind]::Absolute) ) {
|
||||
elseif ( $NoHyperLinkConversion -ne '*' -and # Put the check for 'NoHyperLinkConversion is null' first to skip checking for wellformedstring
|
||||
$NoHyperLinkConversion -notcontains $Name -and
|
||||
[System.Uri]::IsWellFormedUriString($v , [System.UriKind]::Absolute)
|
||||
) {
|
||||
if ($v -match "^xl://internal/") {
|
||||
$referenceAddress = $v -replace "^xl://internal/" , ""
|
||||
$display = $referenceAddress -replace "!A1$" , ""
|
||||
@@ -344,8 +350,8 @@
|
||||
}
|
||||
else {
|
||||
$number = $null
|
||||
if ( $numberRegex.IsMatch($v) -and # if it contains digit(s) - this syntax is quicker than -match for many items and cuts out slow checks for non numbers
|
||||
$NoNumberConversion -ne '*' -and # and NoNumberConversion isn't specified
|
||||
if ( $NoNumberConversion -ne '*' -and # Check if NoNumberConversion isn't specified. Put this first as it's going to stop the if clause. Quicker than putting regex check first
|
||||
$numberRegex.IsMatch($v) -and # and if it contains digit(s) - this syntax is quicker than -match for many items and cuts out slow checks for non numbers
|
||||
$NoNumberConversion -notcontains $Name -and
|
||||
[Double]::TryParse($v, [System.Globalization.NumberStyles]::Any, [System.Globalization.NumberFormatInfo]::CurrentInfo, [Ref]$number)
|
||||
) {
|
||||
@@ -494,7 +500,7 @@
|
||||
}
|
||||
elseif ($FreezeTopRow) {
|
||||
if ($Title) {
|
||||
$ws.View.FreezePanes(2, 1)
|
||||
$ws.View.FreezePanes(3, 1)
|
||||
Write-Verbose -Message "Froze title and header rows"
|
||||
}
|
||||
else {
|
||||
|
||||
47
Public/Get-ExcelFileSchema.ps1
Normal file
47
Public/Get-ExcelFileSchema.ps1
Normal file
@@ -0,0 +1,47 @@
|
||||
function Get-ExcelFileSchema {
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Gets the schema of an Excel file.
|
||||
|
||||
.DESCRIPTION
|
||||
The Get-ExcelFileSchema function gets the schema of an Excel file by returning the property names of the first row of each worksheet in the file.
|
||||
|
||||
.PARAMETER Path
|
||||
Specifies the path to the Excel file.
|
||||
|
||||
.PARAMETER Compress
|
||||
Indicates whether to compress the json output.
|
||||
|
||||
.OUTPUTS
|
||||
Json
|
||||
|
||||
.EXAMPLE
|
||||
Get-ExcelFileSchema -Path .\example.xlsx
|
||||
#>
|
||||
|
||||
[CmdletBinding()]
|
||||
param(
|
||||
[Parameter(ValueFromPipelineByPropertyName, Mandatory)]
|
||||
[Alias('FullName')]
|
||||
$Path,
|
||||
[Switch]$Compress
|
||||
)
|
||||
|
||||
Begin {
|
||||
$result = @()
|
||||
}
|
||||
|
||||
Process {
|
||||
$excelFiles = Get-ExcelFileSummary $Path
|
||||
|
||||
foreach ($excelFile in $excelFiles) {
|
||||
$data = Import-Excel $Path -WorksheetName $excelFile.WorksheetName | Select-Object -First 1
|
||||
$names = $data[0].PSObject.Properties.name
|
||||
$result += $excelFile | Add-Member -MemberType NoteProperty -Name "PropertyNames" -Value $names -PassThru
|
||||
}
|
||||
}
|
||||
|
||||
End {
|
||||
$result | ConvertTo-Json -Compress:$Compress
|
||||
}
|
||||
}
|
||||
@@ -50,7 +50,9 @@ function Get-HtmlTable {
|
||||
else {
|
||||
$h = ConvertFrom-Html -Content $r.Content
|
||||
if ($TableIndex -is [valuetype]) { $TableIndex += 1}
|
||||
$rows = $h.SelectNodes("//table[$TableIndex]//tr")
|
||||
$rows = try {
|
||||
$h.SelectSingleNode("//table[$TableIndex]").SelectNodes(".//tr")
|
||||
} catch {}
|
||||
if (-not $rows) {Write-Warning "Could not find rows for `"//table[$TableIndex]`" in $Url ."}
|
||||
if ( -not $propertyNames) {
|
||||
if ( $tableHeaders = $rows[$FirstDataRow].SelectNodes("th")) {
|
||||
|
||||
24
README.md
24
README.md
@@ -4,15 +4,33 @@
|
||||
|
||||
<br/>
|
||||
|
||||
[](https://dougfinke.visualstudio.com/ImportExcel/_build)
|
||||
Has the ImportExcel module helped you?
|
||||
- Made you look good to the boss?
|
||||
- Saved you time?
|
||||
- Made you more productive?
|
||||
|
||||
Consider donating. Thank you!
|
||||
<br>
|
||||
<br>
|
||||
<a href="https://www.paypal.com/paypalme/DougCharlesFinke"><img src="https://img.shields.io/badge/Donate-PayPal-green.svg" alt="Donate" height="28"></a>
|
||||
<br>
|
||||
<br>
|
||||

|
||||
<br>
|
||||
<br>
|
||||
|
||||
[](https://twitter.com/dfinke)
|
||||
[](https://youtube.com/@dougfinke/)
|
||||
<br/>
|
||||
<br/>
|
||||
[](https://www.powershellgallery.com/packages/ImportExcel)
|
||||
[](https://www.powershellgallery.com/packages/ImportExcel)
|
||||
[](https://github.com/dfinke/ImportExcel/tree/70ab9e46c776e96fb287682d5b9b4b51a0ec3bac/LICENSE.txt)
|
||||
<a href="https://www.paypal.com/paypalme/DougCharlesFinke"><img src="https://img.shields.io/badge/Donate-PayPal-green.svg" alt="Donate"></a>
|
||||
|
||||
# Overview
|
||||
|
||||
Automate Excel with PowerShell without having Excel installed. Works on Windows, Linux and MAC. Creating Tables, Pivot Tables, Charts and much more just got a lot easier.
|
||||
Automate Excel with PowerShell without having Excel installed. Works on Windows, Linux and Mac. Creating Tables, Pivot Tables, Charts and much more just got a lot easier.
|
||||
|
||||
## Examples ✨
|
||||
Check out the [more than 100 examples](Examples/) on ways to create amazing reports as well as make you more productive with PowerShell and Excel.
|
||||
|
||||
135
__tests__/Add-ExcelChart-XAxis.Tests.ps1
Normal file
135
__tests__/Add-ExcelChart-XAxis.Tests.ps1
Normal file
@@ -0,0 +1,135 @@
|
||||
# Test for X-Axis configuration on line charts
|
||||
# This test verifies that XMajorUnit and XMinorUnit parameters work correctly for line charts
|
||||
|
||||
Describe "X-Axis Configuration for Line Charts" {
|
||||
BeforeAll {
|
||||
$path = "TestDrive:\xaxis_test.xlsx"
|
||||
}
|
||||
|
||||
Context "X-Axis MajorUnit and MinorUnit on Line Charts" {
|
||||
BeforeAll {
|
||||
# Create test data
|
||||
$excel = 1..7 | ForEach-Object {
|
||||
[pscustomobject][ordered]@{
|
||||
XValue = @(5, 10, 15, 20, 25, 30, 35)[$_ - 1]
|
||||
YValue = @(18, 11, 23, 17, 12, 32, 12)[$_ - 1]
|
||||
}
|
||||
} | Export-Excel -Path $path -WorksheetName "Test" -PassThru -AutoNameRange
|
||||
|
||||
# Add chart with X-axis configuration
|
||||
Add-ExcelChart -Worksheet $excel.Workbook.Worksheets["Test"] `
|
||||
-ChartType Line `
|
||||
-XRange "XValue" `
|
||||
-YRange "YValue" `
|
||||
-Title "Test Chart" `
|
||||
-XMinValue 0 `
|
||||
-XMaxValue 40 `
|
||||
-XMajorUnit 10 `
|
||||
-XMinorUnit 5 `
|
||||
-YMinValue 0 `
|
||||
-YMaxValue 40 `
|
||||
-YMajorUnit 10 `
|
||||
-YMinorUnit 5
|
||||
|
||||
Close-ExcelPackage $excel
|
||||
|
||||
# Reopen to verify
|
||||
$excel = Open-ExcelPackage -Path $path
|
||||
$ws = $excel.Workbook.Worksheets["Test"]
|
||||
$chart = $ws.Drawings[0]
|
||||
}
|
||||
|
||||
It "Set XAxis.MinValue correctly" {
|
||||
$chart.XAxis.MinValue | Should -Be 0
|
||||
}
|
||||
|
||||
It "Set XAxis.MaxValue correctly" {
|
||||
$chart.XAxis.MaxValue | Should -Be 40
|
||||
}
|
||||
|
||||
It "Set XAxis.MajorUnit correctly" {
|
||||
$chart.XAxis.MajorUnit | Should -Be 10
|
||||
}
|
||||
|
||||
It "Set XAxis.MinorUnit correctly" {
|
||||
$chart.XAxis.MinorUnit | Should -Be 5
|
||||
}
|
||||
|
||||
It "Added MajorUnit to category axis XML" {
|
||||
$xml = $chart.ChartXml
|
||||
$nsmgr = New-Object System.Xml.XmlNamespaceManager($xml.NameTable)
|
||||
$nsmgr.AddNamespace("c", "http://schemas.openxmlformats.org/drawingml/2006/chart")
|
||||
$catAx = $xml.SelectSingleNode("//c:catAx", $nsmgr)
|
||||
$majorUnit = $catAx.SelectSingleNode("c:majorUnit", $nsmgr)
|
||||
|
||||
$majorUnit | Should -Not -BeNullOrEmpty
|
||||
$majorUnit.val | Should -Be "10"
|
||||
}
|
||||
|
||||
It "Added MinorUnit to category axis XML" {
|
||||
$xml = $chart.ChartXml
|
||||
$nsmgr = New-Object System.Xml.XmlNamespaceManager($xml.NameTable)
|
||||
$nsmgr.AddNamespace("c", "http://schemas.openxmlformats.org/drawingml/2006/chart")
|
||||
$catAx = $xml.SelectSingleNode("//c:catAx", $nsmgr)
|
||||
$minorUnit = $catAx.SelectSingleNode("c:minorUnit", $nsmgr)
|
||||
|
||||
$minorUnit | Should -Not -BeNullOrEmpty
|
||||
$minorUnit.val | Should -Be "5"
|
||||
}
|
||||
|
||||
AfterAll {
|
||||
Close-ExcelPackage $excel -NoSave
|
||||
}
|
||||
}
|
||||
|
||||
Context "X-Axis without MajorUnit and MinorUnit" {
|
||||
BeforeAll {
|
||||
$path2 = "TestDrive:\xaxis_test2.xlsx"
|
||||
# Create test data without X-axis units
|
||||
$excel2 = 1..7 | ForEach-Object {
|
||||
[pscustomobject][ordered]@{
|
||||
XValue = @(5, 10, 15, 20, 25, 30, 35)[$_ - 1]
|
||||
YValue = @(18, 11, 23, 17, 12, 32, 12)[$_ - 1]
|
||||
}
|
||||
} | Export-Excel -Path $path2 -WorksheetName "Test" -PassThru -AutoNameRange
|
||||
|
||||
# Add chart WITHOUT X-axis MajorUnit/MinorUnit
|
||||
Add-ExcelChart -Worksheet $excel2.Workbook.Worksheets["Test"] `
|
||||
-ChartType Line `
|
||||
-XRange "XValue" `
|
||||
-YRange "YValue" `
|
||||
-Title "Test Chart"
|
||||
|
||||
Close-ExcelPackage $excel2
|
||||
|
||||
# Reopen to verify
|
||||
$excel2 = Open-ExcelPackage -Path $path2
|
||||
$ws2 = $excel2.Workbook.Worksheets["Test"]
|
||||
$chart2 = $ws2.Drawings[0]
|
||||
}
|
||||
|
||||
It "Should not add MajorUnit to category axis XML when not specified" {
|
||||
$xml = $chart2.ChartXml
|
||||
$nsmgr = New-Object System.Xml.XmlNamespaceManager($xml.NameTable)
|
||||
$nsmgr.AddNamespace("c", "http://schemas.openxmlformats.org/drawingml/2006/chart")
|
||||
$catAx = $xml.SelectSingleNode("//c:catAx", $nsmgr)
|
||||
$majorUnit = $catAx.SelectSingleNode("c:majorUnit", $nsmgr)
|
||||
|
||||
$majorUnit | Should -BeNullOrEmpty
|
||||
}
|
||||
|
||||
It "Should not add MinorUnit to category axis XML when not specified" {
|
||||
$xml = $chart2.ChartXml
|
||||
$nsmgr = New-Object System.Xml.XmlNamespaceManager($xml.NameTable)
|
||||
$nsmgr.AddNamespace("c", "http://schemas.openxmlformats.org/drawingml/2006/chart")
|
||||
$catAx = $xml.SelectSingleNode("//c:catAx", $nsmgr)
|
||||
$minorUnit = $catAx.SelectSingleNode("c:minorUnit", $nsmgr)
|
||||
|
||||
$minorUnit | Should -BeNullOrEmpty
|
||||
}
|
||||
|
||||
AfterAll {
|
||||
Close-ExcelPackage $excel2 -NoSave
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -205,7 +205,7 @@ Describe ExportExcel -Tag "ExportExcel" {
|
||||
else { $OtherCurrencySymbol = "£" }
|
||||
$path = "TestDrive:\test.xlsx"
|
||||
$warnVar = $null
|
||||
#Test correct export of different data types and number formats; test hyperlinks, test -NoNumberConversion test object is converted to a string with no warnings, test calcuation of formula
|
||||
#Test correct export of different data types and number formats; test hyperlinks, test -NoNumberConversion and -NoHyperLinkConversion test object is converted to a string with no warnings, test calcuation of formula
|
||||
Remove-item -Path $path -ErrorAction SilentlyContinue
|
||||
[PSCustOmobject][Ordered]@{
|
||||
Date = Get-Date
|
||||
@@ -233,9 +233,10 @@ Describe ExportExcel -Tag "ExportExcel" {
|
||||
Link3 = "xl://internal/sheet1!A1"
|
||||
Link4 = "xl://internal/sheet1!C5"
|
||||
Link5 = (New-Object -TypeName OfficeOpenXml.ExcelHyperLink -ArgumentList "Sheet1!E2" , "Display Text")
|
||||
Link6 = "xl://internal/sheet1!C5"
|
||||
Process = (Get-Process -Id $PID)
|
||||
TimeSpan = [datetime]::Now.Subtract([datetime]::Today)
|
||||
} | Export-Excel -NoNumberConversion IPAddress, StrLeadZero, StrAltPhone2 -Path $path -Calculate -WarningVariable $warnVar
|
||||
} | Export-Excel -NoNumberConversion IPAddress, StrLeadZero, StrAltPhone2 -NoHyperLinkConversion Link6 -Path $path -Calculate -WarningVariable $warnVar
|
||||
}
|
||||
|
||||
BeforeEach {
|
||||
@@ -253,7 +254,7 @@ Describe ExportExcel -Tag "ExportExcel" {
|
||||
}
|
||||
it "Created the worksheet with the expected name, number of rows and number of columns " {
|
||||
$ws.Name | Should -Be "sheet1"
|
||||
$ws.Dimension.Columns | Should -Be 27
|
||||
$ws.Dimension.Columns | Should -Be 28
|
||||
$ws.Dimension.Rows | Should -Be 2
|
||||
}
|
||||
it "Set a date in Cell A2 " {
|
||||
@@ -292,6 +293,9 @@ Describe ExportExcel -Tag "ExportExcel" {
|
||||
$ws.Cells[2, 25].Hyperlink.ReferenceAddress | Should -Be "sheet1!E2"
|
||||
$ws.Cells[2, 25].Hyperlink.Display | Should -Be "Display Text"
|
||||
}
|
||||
it "Create no link in cell Z2 (no hyperlink conversion) " {
|
||||
$ws.Cells[2, 26].Hyperlink | Should -BeNullOrEmpty
|
||||
}
|
||||
it "Processed thousands according to local settings (Cells H2 and I2) " {
|
||||
if ((Get-Culture).NumberFormat.NumberGroupSeparator -EQ ",") {
|
||||
($ws.Cells[2, 8].Value -is [valuetype] ) | Should -Be $true
|
||||
@@ -314,13 +318,13 @@ Describe ExportExcel -Tag "ExportExcel" {
|
||||
($ws.Cells[2, 19].Value -is [valuetype] ) | Should -Be $true
|
||||
($ws.Cells[2, 20].Value -is [valuetype] ) | Should -Be $true
|
||||
}
|
||||
it "Converted a nested object to a string (Y2) " {
|
||||
$ws.Cells[2, 26].Value | Should -Match '^System\.Diagnostics\.Process\s+\(.*\)$'
|
||||
it "Converted a nested object to a string (AA2) " {
|
||||
$ws.Cells[2, 27].Value | Should -Match '^System\.Diagnostics\.Process\s+\(.*\)$'
|
||||
}
|
||||
it "Processed a timespan object (Z2) " {
|
||||
$ws.cells[2, 27].Value.ToOADate() | Should -BeGreaterThan 0
|
||||
$ws.cells[2, 27].Value.ToOADate() | Should -BeLessThan 1
|
||||
$ws.cells[2, 27].Style.Numberformat.Format | Should -Be '[h]:mm:ss'
|
||||
it "Processed a timespan object (AB2) " {
|
||||
$ws.cells[2, 28].Value.ToOADate() | Should -BeGreaterThan 0
|
||||
$ws.cells[2, 28].Value.ToOADate() | Should -BeLessThan 1
|
||||
$ws.cells[2, 28].Style.Numberformat.Format | Should -Be '[h]:mm:ss'
|
||||
}
|
||||
}
|
||||
|
||||
@@ -344,8 +348,9 @@ Describe ExportExcel -Tag "ExportExcel" {
|
||||
PhoneNr1 = '+32 44'
|
||||
PhoneNr2 = '+32 4 4444 444'
|
||||
PhoneNr3 = '+3244444444'
|
||||
Link = [uri]"https://github.com/dfinke/ImportExcel"
|
||||
} | Export-Excel -NoNumberConversion IPAddress, Number1 -Path $path -NoHeader
|
||||
Link1 = [uri]"https://github.com/dfinke/ImportExcel"
|
||||
Link2 = [uri]"https://github.com/dfinke/ImportExcel"
|
||||
} | Export-Excel -NoHyperLinkConversion Link2 -NoNumberConversion IPAddress, Number1 -Path $path -NoHeader
|
||||
}
|
||||
|
||||
BeforeEach {
|
||||
@@ -363,7 +368,7 @@ Describe ExportExcel -Tag "ExportExcel" {
|
||||
|
||||
it "Created the worksheet with the expected name, number of rows and number of columns " {
|
||||
$ws.Name | Should -Be "sheet1"
|
||||
$ws.Dimension.Columns | Should -Be 14
|
||||
$ws.Dimension.Columns | Should -Be 15
|
||||
$ws.Dimension.Rows | Should -Be 1
|
||||
}
|
||||
|
||||
@@ -387,6 +392,10 @@ Describe ExportExcel -Tag "ExportExcel" {
|
||||
it "Set a hyperlink in Cell N1 " {
|
||||
$ws.Cells[1, 14].Hyperlink | Should -Be "https://github.com/dfinke/ImportExcel"
|
||||
}
|
||||
|
||||
it "Does not set a hyperlink in Cell O1 " {
|
||||
$ws.Cells[1, 15].Hyperlink | Should -BeNullOrEmpty
|
||||
}
|
||||
}
|
||||
|
||||
Context "#Example 5 # Adding a single conditional format " {
|
||||
@@ -693,11 +702,11 @@ Describe ExportExcel -Tag "ExportExcel" {
|
||||
|
||||
# Export as table with a totals row with a set of possibilities
|
||||
$TableTotalSettings = @{
|
||||
Id = "COUNT"
|
||||
WS = "SUM"
|
||||
Handles = "AVERAGE"
|
||||
CPU = '=COUNTIF([CPU];"<1")'
|
||||
NPM = @{
|
||||
Id = "COUNT"
|
||||
WS = "SUM"
|
||||
Handles = "AVERAGE"
|
||||
CPU = '=COUNTIF([CPU];"<1")'
|
||||
NPM = @{
|
||||
Function = '=SUMIF([Name];"=Chrome";[NPM])'
|
||||
Comment = "Sum of Non-Paged Memory (NPM) for all chrome processes"
|
||||
}
|
||||
@@ -761,7 +770,13 @@ Describe ExportExcel -Tag "ExportExcel" {
|
||||
$path = "TestDrive:\test.xlsx"
|
||||
Remove-Item $path -ErrorAction SilentlyContinue
|
||||
#Test freezing top row/first column, adding formats and a pivot table - from Add-Pivot table not a specification variable - after the export
|
||||
$excel = Get-Process | Select-Object -Property Name, Company, Handles, CPU, PM, NPM, WS | Export-Excel -Path $path -ClearSheet -WorkSheetname "Processes" -FreezeTopRowFirstColumn -PassThru
|
||||
$Ex13Data = Get-Process | Select-Object -Property Name, Company, Handles, CPU, PM, NPM, WS
|
||||
$excel = $Ex13Data | Export-Excel -Path $path -ClearSheet -WorkSheetname "Processes" -FreezeTopRowFirstColumn -PassThru
|
||||
# Add extra worksheets for testing 'Freeze Top Row' and 'Freeze First Column' with or without title
|
||||
$excel = Export-Excel -InputObject $Ex13Data -ExcelPackage $excel -WorksheetName "FreezeTopRow" -FreezeTopRow -Passthru
|
||||
$excel = Export-Excel -InputObject $Ex13Data -ExcelPackage $excel -WorksheetName "FreezeFirstColumn" -FreezeFirstColumn -Passthru
|
||||
$excel = Export-Excel -InputObject $Ex13Data -Title "Freeze Top Row" -ExcelPackage $excel -WorksheetName "FreezeTopRowTitle" -FreezeTopRow -Passthru
|
||||
$excel = Export-Excel -InputObject $Ex13Data -Title "Freeze Top Row First Column" -ExcelPackage $excel -WorksheetName "FreezeTRFCTitle" -FreezeTopRowFirstColumn -Passthru
|
||||
$sheet = $excel.Workbook.Worksheets["Processes"]
|
||||
if ($isWindows) { $sheet.Column(1) | Set-ExcelRange -Bold -AutoFit }
|
||||
else { $sheet.Column(1) | Set-ExcelRange -Bold }
|
||||
@@ -781,6 +796,10 @@ Describe ExportExcel -Tag "ExportExcel" {
|
||||
|
||||
$excel = Open-ExcelPackage $path
|
||||
$sheet = $excel.Workbook.Worksheets["Processes"]
|
||||
$sheetftr = $excel.Workbook.Worksheets["FreezeTopRow"]
|
||||
$sheetffc = $excel.Workbook.Worksheets["FreezeFirstColumn"]
|
||||
$sheetftrt = $excel.Workbook.Worksheets["FreezeTopRowTitle"]
|
||||
$sheetftrfct = $excel.Workbook.Worksheets["FreezeTRFCTitle"]
|
||||
}
|
||||
it "Returned the rule when calling Add-ConditionalFormatting -passthru " {
|
||||
$rule | Should -Not -BeNullOrEmpty
|
||||
@@ -827,7 +846,27 @@ Describe ExportExcel -Tag "ExportExcel" {
|
||||
$sheet.Names[6].Name | Should -Be $sheet.Cells['G1'].Value
|
||||
}
|
||||
it "Froze the panes " {
|
||||
$sheet.view.Panes.Count | Should -Be 3
|
||||
$sheetPaneInfo = $sheet.worksheetxml.worksheet.sheetViews.sheetView.pane
|
||||
$sheetftrPaneInfo = $sheetftr.worksheetxml.worksheet.sheetViews.sheetView.pane
|
||||
$sheetffcPaneInfo = $sheetffc.worksheetxml.worksheet.sheetViews.sheetView.pane
|
||||
$sheetftrtPaneInfo = $sheetftrt.worksheetxml.worksheet.sheetViews.sheetView.pane
|
||||
$sheetftrfctPaneInfo = $sheetftrfct.worksheetxml.worksheet.sheetViews.sheetView.pane
|
||||
$sheet.view.Panes.Count | Should -Be 3 # Don't know if this actually checks anything
|
||||
$sheetPaneInfo.xSplit | Should -Be 1
|
||||
$sheetPaneInfo.ySplit | Should -Be 1
|
||||
$sheetPaneInfo.topLeftCell | Should -Be "B2"
|
||||
$sheetftrPaneInfo.xSplit | Should -BeNullOrEmpty
|
||||
$sheetftrPaneInfo.ySplit | Should -Be 1
|
||||
$sheetftrPaneInfo.topLeftCell | Should -Be "A2"
|
||||
$sheetffcPaneInfo.xSplit | Should -Be 1
|
||||
$sheetffcPaneInfo.ySplit | Should -BeNullOrEmpty
|
||||
$sheetffcPaneInfo.topLeftCell | Should -Be "B1"
|
||||
$sheetftrtPaneInfo.xSplit | Should -BeNullOrEmpty
|
||||
$sheetftrtPaneInfo.ySplit | Should -Be 2
|
||||
$sheetftrtPaneInfo.topLeftCell | Should -Be "A3"
|
||||
$sheetftrfctPaneInfo.xSplit | Should -Be 1
|
||||
$sheetftrfctPaneInfo.ySplit | Should -Be 2
|
||||
$sheetftrfctPaneInfo.topLeftCell | Should -Be "B3"
|
||||
}
|
||||
|
||||
it "Created the pivot table " {
|
||||
@@ -1198,4 +1237,120 @@ Describe ExportExcel -Tag "ExportExcel" {
|
||||
Close-ExcelPackage $excel -NoSave
|
||||
}
|
||||
}
|
||||
|
||||
It "Should have hyperlink created" -Tag hyperlink {
|
||||
$path = "TestDrive:\testHyperLink.xlsx"
|
||||
|
||||
$license = "cognc:MCOMEETADV_GOV,cognc:M365_G3_GOV,cognc:ENTERPRISEPACK_GOV,cognc:RIGHTSMANAGEMENT_ADHOC"
|
||||
$ms365 = [PSCustomObject]@{
|
||||
DisplayName = "Test Subject"
|
||||
UserPrincipalName = "test@contoso.com"
|
||||
licenses = $license
|
||||
}
|
||||
|
||||
$ms365 | Export-Excel $path
|
||||
|
||||
$excel = Open-ExcelPackage $Path
|
||||
|
||||
$ws = $excel.Sheet1
|
||||
|
||||
$ws.Dimension.Rows | Should -Be 2
|
||||
$ws.Dimension.Columns | Should -Be 3
|
||||
|
||||
$ws.Cells["C2"].Hyperlink | Should -BeExactly $license
|
||||
|
||||
Close-ExcelPackage $excel
|
||||
|
||||
Remove-Item $path
|
||||
}
|
||||
|
||||
It "Should have no hyperlink created" -Tag hyperlink {
|
||||
$path = "TestDrive:\testHyperLink.xlsx"
|
||||
|
||||
$license = "cognc:MCOMEETADV_GOV,cognc:M365_G3_GOV,cognc:ENTERPRISEPACK_GOV,cognc:RIGHTSMANAGEMENT_ADHOC"
|
||||
$ms365 = [PSCustomObject]@{
|
||||
DisplayName = "Test Subject"
|
||||
UserPrincipalName = "test@contoso.com"
|
||||
licenses = $license
|
||||
}
|
||||
|
||||
$ms365 | Export-Excel $path -NoHyperLinkConversion licenses
|
||||
|
||||
$excel = Open-ExcelPackage $Path
|
||||
|
||||
$ws = $excel.Sheet1
|
||||
|
||||
$ws.Dimension.Rows | Should -Be 2
|
||||
$ws.Dimension.Columns | Should -Be 3
|
||||
|
||||
$ws.Cells["C2"].Hyperlink | Should -BeNullOrEmpty
|
||||
|
||||
Close-ExcelPackage $excel
|
||||
Remove-Item $path
|
||||
}
|
||||
|
||||
It "Should have no hyperlink created using wild card" -Tag hyperlink {
|
||||
$path = "TestDrive:\testHyperLink.xlsx"
|
||||
|
||||
$license = "cognc:MCOMEETADV_GOV,cognc:M365_G3_GOV,cognc:ENTERPRISEPACK_GOV,cognc:RIGHTSMANAGEMENT_ADHOC"
|
||||
$ms365 = [PSCustomObject]@{
|
||||
DisplayName = "Test Subject"
|
||||
UserPrincipalName = "test@contoso.com"
|
||||
licenses = $license
|
||||
}
|
||||
|
||||
$ms365 | Export-Excel $path -NoHyperLinkConversion *
|
||||
|
||||
$excel = Open-ExcelPackage $Path
|
||||
|
||||
$ws = $excel.Sheet1
|
||||
|
||||
$ws.Dimension.Rows | Should -Be 2
|
||||
$ws.Dimension.Columns | Should -Be 3
|
||||
|
||||
$ws.Cells["A2"].Value | Should -BeExactly "Test Subject"
|
||||
$ws.Cells["B2"].Value | Should -BeExactly "test@contoso.com"
|
||||
$ws.Cells["C2"].Hyperlink | Should -BeNullOrEmpty
|
||||
|
||||
Close-ExcelPackage $excel
|
||||
Remove-Item $path
|
||||
}
|
||||
|
||||
It "Should freeze the correct rows" -tag Freeze {
|
||||
<#
|
||||
Export-Excel -InputObject $Data -Path $OutputFile -TableName $SheetName.Replace(' ', '_') -WorksheetName $SheetName -AutoSize -FreezeTopRow -TableStyle $TableStyle -Title $SheetName -TitleBold -TitleSize 18
|
||||
#>
|
||||
|
||||
$path = "TestDrive:\testFreeze.xlsx"
|
||||
|
||||
$data = ConvertFrom-Csv @"
|
||||
Region,State,Units,Price
|
||||
West,Texas,927,923.71
|
||||
North,Tennessee,466,770.67
|
||||
East,Florida,520,458.68
|
||||
East,Maine,828,661.24
|
||||
West,Virginia,465,053.58
|
||||
North,Missouri,436,235.67
|
||||
South,Kansas,214,992.47
|
||||
North,North Dakota,789,640.72
|
||||
South,Delaware,712,508.55
|
||||
"@
|
||||
|
||||
Export-Excel -InputObject $data -Path $path -TableName 'TestTable' -WorksheetName 'TestSheet' -AutoSize -TableStyle Medium2 -Title 'Test Title' -TitleBold -TitleSize 18 -FreezeTopRow
|
||||
|
||||
$excel = Open-ExcelPackage -Path $path
|
||||
$ws = $excel.TestSheet
|
||||
|
||||
$r = $ws.worksheetxml.worksheet.sheetViews.sheetView.pane
|
||||
|
||||
$r | Should -Not -BeNullOrEmpty
|
||||
$r.ySplit | Should -Be 2
|
||||
$r.topLeftCell | Should -BeExactly 'A3'
|
||||
$r.state | Should -BeExactly 'frozen'
|
||||
$r.activePane | Should -BeExactly 'bottomLeft'
|
||||
|
||||
Close-ExcelPackage $excel
|
||||
|
||||
Remove-Item $path
|
||||
}
|
||||
}
|
||||
54
__tests__/Get-ExcelFileSchema.tests.ps1
Normal file
54
__tests__/Get-ExcelFileSchema.tests.ps1
Normal file
@@ -0,0 +1,54 @@
|
||||
if (-not (Get-command Import-Excel -ErrorAction SilentlyContinue)) {
|
||||
Import-Module $PSScriptRoot\..\ImportExcel.psd1
|
||||
}
|
||||
|
||||
Describe "Test getting the schema of an Excel file" -Tag GetExcelFileSchema {
|
||||
|
||||
BeforeAll {
|
||||
$script:excelFile = "TestDrive:\test.xlsx"
|
||||
$data = ConvertFrom-Csv @"
|
||||
Region,State,Units,Price
|
||||
West,Texas,927,923.71
|
||||
North,Tennessee,466,770.67
|
||||
East,Florida,520,458.68
|
||||
East,Maine,828,661.24
|
||||
West,Virginia,465,053.58
|
||||
North,Missouri,436,235.67
|
||||
South,Kansas,214,992.47
|
||||
North,North Dakota,789,640.72
|
||||
South,Delaware,712,508.55
|
||||
"@
|
||||
$data | Export-Excel $excelFile
|
||||
}
|
||||
|
||||
It "Test Get-ExcelFileSchema function exists" {
|
||||
$function = Get-Command Get-ExcelFileSchema -ErrorAction SilentlyContinue
|
||||
$function | Should -Not -Be $null
|
||||
}
|
||||
|
||||
It "Test Get-ExcelFileSchema returns json" {
|
||||
$actual = Get-ExcelFileSchema -Path $excelFile
|
||||
$actual | Should -Not -Be $null
|
||||
$actual | Should -BeOfType [string]
|
||||
}
|
||||
|
||||
It "Test Get-ExcelFileSchema correct json" {
|
||||
$actual = Get-ExcelFileSchema -Path $excelFile
|
||||
$actual = $actual | ConvertFrom-Json
|
||||
|
||||
$actual.ExcelFile | Should -BeExactly "test.xlsx"
|
||||
$actual.WorksheetName | Should -BeExactly "Sheet1"
|
||||
$actual.Visible | Should -Be $true
|
||||
$actual.Rows | Should -Be 10
|
||||
$actual.Columns | Should -Be 4
|
||||
$actual.Address | Should -BeExactly "A1:D10"
|
||||
|
||||
$actual.Path | Should -BeExactly ("TestDrive:" + [System.IO.Path]::DirectorySeparatorChar)
|
||||
|
||||
$actual.PropertyNames.Count | Should -Be 4
|
||||
$actual.PropertyNames[0] | Should -BeExactly "Region"
|
||||
$actual.PropertyNames[1] | Should -BeExactly "State"
|
||||
$actual.PropertyNames[2] | Should -BeExactly "Units"
|
||||
$actual.PropertyNames[3] | Should -BeExactly "Price"
|
||||
}
|
||||
}
|
||||
65
changelog.md
65
changelog.md
@@ -1,6 +1,69 @@
|
||||
# 7.8.3
|
||||
# 7.8.10
|
||||
|
||||
- Thank you https://github.com/evenmartinsen for the PR to fix the AV
|
||||
|
||||
# 7.8.9
|
||||
|
||||
- Thanks to (Edward Miller)[https://github.com/edwardmiller-mesirow] for improving `ConvertTo-ExcelXlsx`and making it more robust
|
||||
|
||||
# 7.8.8
|
||||
|
||||
- Fix the release
|
||||
|
||||
# 7.8.7
|
||||
|
||||
- Thanks to [Phil Bossman](https://github.com/pbossman) for the PR and fixing this.
|
||||
|
||||
Now, back again, you can type `Import-Excel .\yearlySales.xlsx`, press <ctrl+space> and get a list of the worksheets in the Excel file
|
||||
|
||||

|
||||
|
||||
# Infrastructure change
|
||||
|
||||
- Thank you to [RipFence](https://github.com/RipFence) who asked how to place a chart on a different sheet from the data and then did a PR adding the example.
|
||||
- added `ignore` so files checked into examples do not trigger a CI run
|
||||
|
||||
# 7.8.6
|
||||
|
||||
- Thank you [John Boyne](https://github.com/kyllath)
|
||||
- Add missing parameter aliases to align with caller/callee
|
||||
|
||||
# 7.8.5
|
||||
|
||||
- Added `Get-ExcelFileSchema` to get the schema of an Excel file.
|
||||
- This was added to support interacting with `ChatGPT`. Passing the schema to the `ChatGPT` via `PowerShellAI` let's you ask questions about the data including generating code based on the schema.
|
||||
|
||||
```powershell
|
||||
Get-ExcelFileSchema .\salesData.xlsx
|
||||
```
|
||||
|
||||
```json
|
||||
{
|
||||
"ExcelFile": "salesData.xlsx",
|
||||
"WorksheetName": "Sheet1",
|
||||
"Visible": true,
|
||||
"Rows": 10,
|
||||
"Columns": 4,
|
||||
"Address": "A1:D10",
|
||||
"Path": ".",
|
||||
"PropertyNames": [
|
||||
"Region",
|
||||
"State",
|
||||
"Units",
|
||||
"Price"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
# 7.8.x
|
||||
|
||||
Thanks to [Thomas Hofkens](https://github.com/thkn-hofa)
|
||||
- Added `-NoHyperLinkConversion` to `Export-Excel` to no convert data to hyperlinks. [#1316](https://github.com/dfinke/ImportExcel/issues/1316)
|
||||
|
||||
# 7.8.4
|
||||
|
||||
- Add -ShowOnlyIcon to `New-ConditionalFormattingIconSet` does not show data in the cell, just the icon. Based on this discussion https://github.com/dfinke/ImportExcel/discussions/1340
|
||||
|
||||
# 7.8.3
|
||||
|
||||
Thanks [Thomas Hofkens](https://github.com/thkn-hofa)
|
||||
|
||||
BIN
images/AutoCompleteSheetNames.png
Normal file
BIN
images/AutoCompleteSheetNames.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 11 KiB |
5592
llms-examples.txt
Normal file
5592
llms-examples.txt
Normal file
File diff suppressed because it is too large
Load Diff
@@ -66,7 +66,7 @@ PS\> $excel = $avdata | Export-Excel -Path (Join-path $FilePath "\Machines.XLSX"
|
||||
$excel.Save() ; $excel.Dispose()
|
||||
```
|
||||
|
||||
Here Export-Excel is called with the -PassThru parameter, so the ExcelPackage object representing Machines.XLSX is stored in $Excel.The desired worksheet is selected, and then columns" B" and "I" are conditionally formatted \(excluding the top row\) to show red text if they contain "2003" or "Disabled" respectively.
|
||||
Here Export-Excel is called with the -PassThru parameter, so the ExcelPackage object representing Machines.XLSX is stored in $Excel. The desired worksheet is selected, and then columns" B" and "I" are conditionally formatted \(excluding the top row\) to show red text if they contain "2003" or "Disabled" respectively.
|
||||
|
||||
A fixed date format is then applied to columns D to G, and the top row is formatted.
|
||||
|
||||
@@ -83,7 +83,7 @@ Again Export-Excel has been called with -PassThru leaving a package object in $E
|
||||
|
||||
This time B1:B100 has been conditionally formatted with 3 icons, using the "Flags" Icon-Set.
|
||||
|
||||
Add-ConditionalFormatting does not provide accessto every option in the formatting rule, so -PassThru has been used and the rule is modified to apply the flags in reverse order, and transitions between flags are set to 100 and 1000.
|
||||
Add-ConditionalFormatting does not provide access to every option in the formatting rule, so -PassThru has been used and the rule is modified to apply the flags in reverse order, and transitions between flags are set to 100 and 1000.
|
||||
|
||||
### EXAMPLE 3
|
||||
|
||||
|
||||
@@ -81,7 +81,7 @@ PS\> $Excel = Invoke-Sum (Get-Process) Company Handles, PM, VirtualMemorySize |
|
||||
|
||||
The first line exports information to a table in new file; and captures the excel Package object in $Excel
|
||||
|
||||
The second line creates a chart on the first page of the work sheet, using the notation "TableName\[ColumnnName\]" to refer to the data, the labels come Name column in the table, and the data series from its PM and VirtualMemorySize columns. The display names for these in the header are set to 'PM' and 'VMSize'.
|
||||
The second line creates a chart on the first page of the work sheet, using the notation "TableName\[ColumnName\]" to refer to the data, the labels come Name column in the table, and the data series from its PM and VirtualMemorySize columns. The display names for these in the header are set to 'PM' and 'VMSize'.
|
||||
|
||||
### EXAMPLE 4
|
||||
|
||||
|
||||
@@ -16,19 +16,19 @@ Exports data to an Excel worksheet.
|
||||
### Default \(Default\)
|
||||
|
||||
```text
|
||||
Export-Excel [[-Path] <String>] [-InputObject <Object>] [-Calculate] [-Show] [-WorksheetName <String>] [-Password <String>] [-ClearSheet] [-Append] [-Title <String>] [-TitleFillPattern <ExcelFillStyle>] [-TitleBold] [-TitleSize <Int32>] [-TitleBackgroundColor <Object>][-IncludePivotTable] [-PivotTableName <String>] [-PivotRows <String[]> [-PivotColumns <String[]>] [-PivotData <Object>] [-PivotFilter <String[]>] [-PivotDataToColumn] [-PivotTableDefinition <Hashtable>] [-IncludePivotChart] [-ChartType <eChartType>] [-NoLegend] [-ShowCategory] [-ShowPercent] [-AutoSize] [-MaxAutoSizeRows <Object>] [-NoClobber] [-FreezeTopRow] [-FreezeFirstColumn] [-FreezeTopRowFirstColumn] [-FreezePane <Int32[]>] [-AutoFilter] [-BoldTopRow] [-NoHeader] [-RangeName <String>] [-TableName <Object>] [-TableStyle <TableStyles>] [-TableTotalSettings <HashTable>] [-Barchart] [-PieChart] [-LineChart] [-ColumnChart] [-ExcelChartDefinition <Object[]>] [-HideSheet <String[]>] [-UnHideSheet <String[]>] [-MoveToStart] [-MoveToEnd] [-MoveBefore <Object>] [-MoveAfter <Object>] [-KillExcel] [-AutoNameRange] [-StartRow <Int32>] [-StartColumn <Int32>] [-PassThru] [-Numberformat <String>] [-ExcludeProperty <String[]>] [-NoAliasOrScriptPropeties] [-DisplayPropertySet] [-NoNumberConversion <String[]>] [-ConditionalFormat <Object[]>] [-ConditionalText <Object[]>] [-Style <Object[]>] [-CellStyleSB <ScriptBlock>] [-Activate] [-Now] [-ReturnRange] [-PivotTotals <String>] [-NoTotalsInPivot] [-ReZip] [<CommonParameters>]
|
||||
Export-Excel [[-Path] <String>] [-InputObject <Object>] [-Calculate] [-Show] [-WorksheetName <String>] [-Password <String>] [-ClearSheet] [-Append] [-Title <String>] [-TitleFillPattern <ExcelFillStyle>] [-TitleBold] [-TitleSize <Int32>] [-TitleBackgroundColor <Object>][-IncludePivotTable] [-PivotTableName <String>] [-PivotRows <String[]> [-PivotColumns <String[]>] [-PivotData <Object>] [-PivotFilter <String[]>] [-PivotDataToColumn] [-PivotTableDefinition <Hashtable>] [-IncludePivotChart] [-ChartType <eChartType>] [-NoLegend] [-ShowCategory] [-ShowPercent] [-AutoSize] [-MaxAutoSizeRows <Object>] [-NoClobber] [-FreezeTopRow] [-FreezeFirstColumn] [-FreezeTopRowFirstColumn] [-FreezePane <Int32[]>] [-AutoFilter] [-BoldTopRow] [-NoHeader] [-RangeName <String>] [-TableName <Object>] [-TableStyle <TableStyles>] [-TableTotalSettings <HashTable>] [-Barchart] [-PieChart] [-LineChart] [-ColumnChart] [-ExcelChartDefinition <Object[]>] [-HideSheet <String[]>] [-UnHideSheet <String[]>] [-MoveToStart] [-MoveToEnd] [-MoveBefore <Object>] [-MoveAfter <Object>] [-KillExcel] [-AutoNameRange] [-StartRow <Int32>] [-StartColumn <Int32>] [-PassThru] [-Numberformat <String>] [-ExcludeProperty <String[]>] [-NoAliasOrScriptPropeties] [-DisplayPropertySet] [-NoNumberConversion <String[]>] [-NoHyperLinkConversion <String[]>] [-ConditionalFormat <Object[]>] [-ConditionalText <Object[]>] [-Style <Object[]>] [-CellStyleSB <ScriptBlock>] [-Activate] [-Now] [-ReturnRange] [-PivotTotals <String>] [-NoTotalsInPivot] [-ReZip] [<CommonParameters>]
|
||||
```
|
||||
|
||||
### Package
|
||||
|
||||
```text
|
||||
Export-Excel -ExcelPackage <ExcelPackage> [-InputObject <Object>] [-Calculate] [-Show] [-WorksheetName <String>] [-Password <String>] [-ClearSheet] [-Append] [-Title <String>] [-TitleFillPattern <ExcelFillStyle>] [-TitleBold] [-TitleSize <Int32>] [-TitleBackgroundColor <Object>] [-IncludePivotTable] [-PivotTableName <String>] [-PivotRows <String[]>] [-PivotColumns <String[]>] [-PivotData <Object>] [-PivotFilter <String[]>] [-PivotDataToColumn] [-PivotTableDefinition <Hashtable>] [-IncludePivotChart] [-ChartType <eChartType>] [-NoLegend] [-ShowCategory] [-ShowPercent] [-AutoSize] [-MaxAutoSizeRows <Object>] [-NoClobber] [-FreezeTopRow] [-FreezeFirstColumn] [-FreezeTopRowFirstColumn] [-FreezePane <Int32[]>] [-AutoFilter] [-BoldTopRow] [-NoHeader] [-RangeName <String>] [-TableName <Object>] [-TableStyle <TableStyles>] [-TableTotalSettings <HashTable>] [-Barchart] [-PieChart] [-LineChart] [-ColumnChart] [-ExcelChartDefinition <Object[]>] [-HideSheet <String[]>] [-UnHideSheet <String[]>] [-MoveToStart] [-MoveToEnd] [-MoveBefore <Object>] [-MoveAfter <Object>] [-KillExcel] [-AutoNameRange] [-StartRow <Int32>] [-StartColumn <Int32>] [-PassThru] [-Numberformat <String>] [-ExcludeProperty <String[]>]
|
||||
[-NoAliasOrScriptPropeties] [-DisplayPropertySet] [-NoNumberConversion <String[]>] [-ConditionalFormat <Object[]>] [-ConditionalText <Object[]>] [-Style <Object[]>] [-CellStyleSB <ScriptBlock>] [-Activate] [-ReturnRange] [-PivotTotals <String>] [-NoTotalsInPivot] [-ReZip] [<CommonParameters>]
|
||||
[-NoAliasOrScriptPropeties] [-DisplayPropertySet] [-NoNumberConversion <String[]>] [-NoHyperLinkConversion <String[]>] [-ConditionalFormat <Object[]>] [-ConditionalText <Object[]>] [-Style <Object[]>] [-CellStyleSB <ScriptBlock>] [-Activate] [-ReturnRange] [-PivotTotals <String>] [-NoTotalsInPivot] [-ReZip] [<CommonParameters>]
|
||||
```
|
||||
|
||||
## DESCRIPTION
|
||||
|
||||
Exports data to an Excel file and where possible tries to convert numbers in text fields so Excel recognizes them as numbers instead of text. After all: Excel is a spreadsheet program used for number manipulation and calculations. The parameter -NoNumberConversion \* can be used if number conversion is not desired.
|
||||
Exports data to an Excel file and where possible tries to convert numbers in text fields so Excel recognizes them as numbers instead of text. After all: Excel is a spreadsheet program used for number manipulation and calculations. The parameter -NoNumberConversion \* can be used if number conversion is not desired. In the same way the parameter NoHyperLinkConversion \* can be used if hyperlink conversion is not desired
|
||||
|
||||
## EXAMPLES
|
||||
|
||||
@@ -108,10 +108,10 @@ PS\> [PSCustOmobject][Ordered]@{
|
||||
PhoneNr1 = '+32 44'
|
||||
PhoneNr2 = '+32 4 4444 444'
|
||||
PhoneNr3 = '+3244444444'
|
||||
} | Export-Excel @ExcelParams -NoNumberConversion *
|
||||
} | Export-Excel @ExcelParams -NoNumberConversion * -NoHyperLinkConversion *
|
||||
```
|
||||
|
||||
Exports all data to the Excel file 'Excel.xslx' as is, no number conversion will take place. This means that Excel will show the exact same data that you handed over to the 'Export-Excel' function.
|
||||
Exports all data to the Excel file 'Excel.xslx' as is, no number or hyperlink conversion will take place. This means that Excel will show the exact same data that you handed over to the 'Export-Excel' function.
|
||||
|
||||
### EXAMPLE 5
|
||||
|
||||
@@ -1357,6 +1357,24 @@ Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -NoHyperLinkConversion
|
||||
|
||||
By default the command will convert all URIs to hyperlinks if possible, but this isn't always desirable. -NoHyperLinkConversion allows you to add exceptions for the conversion.
|
||||
|
||||
The only Wildcard allowed is \* for all properties
|
||||
|
||||
```yaml
|
||||
Type: String[]
|
||||
Parameter Sets: (All)
|
||||
Aliases:
|
||||
|
||||
Required: False
|
||||
Position: Named
|
||||
Default value: None
|
||||
Accept pipeline input: False
|
||||
Accept wildcard characters: False
|
||||
```
|
||||
|
||||
### -ConditionalFormat
|
||||
|
||||
One or more conditional formatting rules defined with New-ConditionalFormattingIconSet.
|
||||
|
||||
Reference in New Issue
Block a user