mirror of
https://github.com/dfinke/ImportExcel.git
synced 2025-12-06 00:23:20 +00:00
Merge pull request #668 from ili101/TestsRebase
Tests improvments and Linux support
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -60,7 +60,6 @@ test.xlsx
|
||||
testCCFMT.ps1
|
||||
testHide.ps1
|
||||
ImportExcel.zip
|
||||
.vscode/launch.json
|
||||
.vscode/settings.json
|
||||
|
||||
~$*
|
||||
|
||||
56
.vscode/launch.json
vendored
Normal file
56
.vscode/launch.json
vendored
Normal file
@@ -0,0 +1,56 @@
|
||||
{
|
||||
// Use IntelliSense to learn about possible attributes.
|
||||
// Hover to view descriptions of existing attributes.
|
||||
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"type": "PowerShell",
|
||||
"request": "launch",
|
||||
"name": "PowerShell Pester Tests",
|
||||
"script": "Import-Module -Name '.\\' -Force ; Invoke-Pester", // Change to '.\\ModuleName.psd1' if Git name different
|
||||
"args": [""],
|
||||
"cwd": "${workspaceFolder}"
|
||||
},
|
||||
{
|
||||
"type": "PowerShell",
|
||||
"request": "launch",
|
||||
"name": "PowerShell Launch Current File",
|
||||
"script": "${file}",
|
||||
"args": [],
|
||||
"cwd": "${file}"
|
||||
},
|
||||
{
|
||||
"type": "PowerShell",
|
||||
"request": "launch",
|
||||
"name": "PowerShell Launch Current File in Temporary Console",
|
||||
"script": "${file}",
|
||||
"args": [],
|
||||
"cwd": "${file}",
|
||||
"createTemporaryIntegratedConsole": true
|
||||
},
|
||||
{
|
||||
"type": "PowerShell",
|
||||
"request": "launch",
|
||||
"name": "PowerShell Launch Current File w/Args Prompt",
|
||||
"script": "${file}",
|
||||
"args": [
|
||||
"${command:SpecifyScriptArgs}"
|
||||
],
|
||||
"cwd": "${file}"
|
||||
},
|
||||
{
|
||||
"type": "PowerShell",
|
||||
"request": "attach",
|
||||
"name": "PowerShell Attach to Host Process",
|
||||
"processId": "${command:PickPSHostProcess}",
|
||||
"runspaceId": 1
|
||||
},
|
||||
{
|
||||
"type": "PowerShell",
|
||||
"request": "launch",
|
||||
"name": "PowerShell Interactive Session",
|
||||
"cwd": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
28
DoTests.ps1
28
DoTests.ps1
@@ -1,28 +0,0 @@
|
||||
param(
|
||||
[Switch]$DontCreateZip
|
||||
)
|
||||
|
||||
##
|
||||
# Used in Appveyor.yml
|
||||
##
|
||||
|
||||
$PSVersionTable.PSVersion
|
||||
|
||||
## Create the zip before the tests run
|
||||
## Otherwise the EPPlus.dll is in use after the Pester run
|
||||
$ModuleVersion = (Invoke-Command -ScriptBlock ([scriptblock]::Create((Get-Content -Raw .\ImportExcel.psd1)))).moduleVersion
|
||||
|
||||
if (!$DontCreateZip) {
|
||||
$dest = "ImportExcel-{0}-{1}.zip" -f $ModuleVersion, (Get-Date).ToString("yyyyMMddHHmmss")
|
||||
Compress-Archive -Path . -DestinationPath .\$dest
|
||||
}
|
||||
|
||||
if ($null -eq (Get-Module -ListAvailable pester)) {
|
||||
Install-Module -Name Pester -Repository PSGallery -Force -Scope CurrentUser
|
||||
}
|
||||
|
||||
$result = Invoke-Pester -Script $PSScriptRoot\__tests__ -Verbose -PassThru
|
||||
|
||||
if ($result.FailedCount -gt 0) {
|
||||
throw "$($result.FailedCount) tests failed."
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
Import-Module ..\ImportExcel.psd1 -Force
|
||||
try {. $PSScriptRoot\..\..\LoadPSD1.ps1} catch {}
|
||||
|
||||
$file = "C:\Temp\test.xlsx"
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
$measure = "Open"
|
||||
)
|
||||
|
||||
$xl = "$env:TEMP\Stocks.xlsx"
|
||||
$xl = Join-Path ([IO.Path]::GetTempPath()) 'Stocks.xlsx'
|
||||
|
||||
Remove-Item $xl -ErrorAction SilentlyContinue
|
||||
|
||||
|
||||
@@ -4,8 +4,8 @@ Add-Type -Path "$($PSScriptRoot)\EPPlus.dll"
|
||||
. $PSScriptRoot\AddDataValidation.ps1
|
||||
. $PSScriptRoot\Charting.ps1
|
||||
. $PSScriptRoot\ColorCompletion.ps1
|
||||
. $PSScriptRoot\Compare-WorkSheet.ps1
|
||||
. $PSScriptRoot\ConvertExcelToImageFile.ps1
|
||||
. $PSScriptRoot\compare-workSheet.ps1
|
||||
. $PSScriptRoot\ConvertFromExcelData.ps1
|
||||
. $PSScriptRoot\ConvertFromExcelToSQLInsert.ps1
|
||||
. $PSScriptRoot\ConvertToExcelXlsx.ps1
|
||||
@@ -23,7 +23,7 @@ Add-Type -Path "$($PSScriptRoot)\EPPlus.dll"
|
||||
. $PSScriptRoot\InferData.ps1
|
||||
. $PSScriptRoot\Invoke-Sum.ps1
|
||||
. $PSScriptRoot\Join-Worksheet.ps1
|
||||
. $PSScriptRoot\Merge-worksheet.ps1
|
||||
. $PSScriptRoot\Merge-Worksheet.ps1
|
||||
. $PSScriptRoot\New-ConditionalFormattingIconSet.ps1
|
||||
. $PSScriptRoot\New-ConditionalText.ps1
|
||||
. $PSScriptRoot\New-ExcelChart.ps1
|
||||
@@ -31,8 +31,9 @@ Add-Type -Path "$($PSScriptRoot)\EPPlus.dll"
|
||||
. $PSScriptRoot\Open-ExcelPackage.ps1
|
||||
. $PSScriptRoot\Pivot.ps1
|
||||
. $PSScriptRoot\PivotTable.ps1
|
||||
#. $PSScriptRoot\Plot.ps1
|
||||
. $PSScriptRoot\RemoveWorksheet.ps1
|
||||
. $PSScriptRoot\Send-SqlDataToExcel.ps1
|
||||
. $PSScriptRoot\Send-SQLDataToExcel.ps1
|
||||
. $PSScriptRoot\Set-CellStyle.ps1
|
||||
. $PSScriptRoot\Set-Column.ps1
|
||||
. $PSScriptRoot\Set-Row.ps1
|
||||
@@ -45,7 +46,7 @@ Add-Type -Path "$($PSScriptRoot)\EPPlus.dll"
|
||||
New-Alias -Name Use-ExcelData -Value "ConvertFrom-ExcelData" -Force
|
||||
|
||||
if ($PSVersionTable.PSVersion.Major -ge 5) {
|
||||
. $PSScriptRoot\plot.ps1
|
||||
. $PSScriptRoot\Plot.ps1
|
||||
|
||||
Function New-Plot {
|
||||
[Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseShouldProcessForStateChangingFunctions', '', Justification = 'New-Plot does not change system state')]
|
||||
@@ -59,6 +60,25 @@ else {
|
||||
Write-Warning 'PowerShell 5 is required for plot.ps1'
|
||||
Write-Warning 'PowerShell Excel is ready, except for that functionality'
|
||||
}
|
||||
if ($IsLinux -or $IsMacOS) {
|
||||
$ExcelPackage = [OfficeOpenXml.ExcelPackage]::new()
|
||||
$Cells = ($ExcelPackage | Add-WorkSheet).Cells['A1']
|
||||
$Cells.Value = 'Test'
|
||||
try {
|
||||
$Cells.AutoFitColumns()
|
||||
}
|
||||
catch {
|
||||
if ($IsLinux) {
|
||||
Write-Warning -Message 'ImportExcel Module Cannot Autosize. Please run the following command to install dependencies: "sudo apt-get install -y --no-install-recommends libgdiplus libc6-dev"'
|
||||
}
|
||||
if ($IsMacOS) {
|
||||
Write-Warning -Message 'ImportExcel Module Cannot Autosize. Please run the following command to install dependencies: "brew install mono-libgdiplus"'
|
||||
}
|
||||
}
|
||||
finally {
|
||||
$ExcelPackage | Close-ExcelPackage -NoSave
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
function Import-Excel {
|
||||
<#
|
||||
|
||||
277
Install.ps1
277
Install.ps1
@@ -1,104 +1,213 @@
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Download the module files from GitHub.
|
||||
|
||||
.DESCRIPTION
|
||||
Download the module files from GitHub to the local client in the module folder.
|
||||
Installs module from Git clone or directly from GitHub.
|
||||
File must not have BOM for GitHub deploy to work.
|
||||
#>
|
||||
|
||||
[CmdLetBinding()]
|
||||
[CmdletBinding(DefaultParameterSetName = 'Default')]
|
||||
Param (
|
||||
# Path to install the module to, if not provided -Scope used.
|
||||
[Parameter(Mandatory, ParameterSetName = 'ModulePath')]
|
||||
[ValidateNotNullOrEmpty()]
|
||||
[String]$ModuleName = 'ImportExcel',
|
||||
[String]$InstallDirectory,
|
||||
[String]$ModulePath,
|
||||
|
||||
# Path to install the module to, PSModulePath "CurrentUser" or "AllUsers", if not provided "CurrentUser" used.
|
||||
[Parameter(Mandatory, ParameterSetName = 'Scope')]
|
||||
[ValidateSet('CurrentUser', 'AllUsers')]
|
||||
[string]
|
||||
$Scope = 'CurrentUser',
|
||||
|
||||
# Get module from GitHub instead of local Git clone, for example "https://raw.githubusercontent.com/ili101/Module.Template/master/Install.ps1"
|
||||
[ValidateNotNullOrEmpty()]
|
||||
[String]$GitPath = 'https://raw.github.com/dfinke/ImportExcel/master'
|
||||
[Uri]$FromGitHub
|
||||
)
|
||||
# Set Files and Folders patterns to Include/Exclude.
|
||||
$IncludeFiles = @(
|
||||
'*.dll',
|
||||
'*.psd1',
|
||||
'*.psm1',
|
||||
'AddConditionalFormatting.ps1',
|
||||
'AddDataValidation.ps1',
|
||||
'Charting.ps1',
|
||||
'ColorCompletion.ps1',
|
||||
'Compare-WorkSheet.ps1',
|
||||
'ConvertExcelToImageFile.ps1',
|
||||
'ConvertFromExcelData.ps1',
|
||||
'ConvertFromExcelToSQLInsert.ps1',
|
||||
'ConvertToExcelXlsx.ps1',
|
||||
'Copy-ExcelWorkSheet.ps1',
|
||||
'Export-Excel.ps1',
|
||||
'Export-ExcelSheet.ps1',
|
||||
'Export-StocksToExcel.ps1',
|
||||
'Get-ExcelColumnName.ps1',
|
||||
'Get-ExcelSheetInfo.ps1',
|
||||
'Get-ExcelWorkbookInfo.ps1',
|
||||
'Get-HtmlTable.ps1',
|
||||
'Get-Range.ps1',
|
||||
'Get-XYRange.ps1',
|
||||
'Import-Html.ps1',
|
||||
'InferData.ps1',
|
||||
'Invoke-Sum.ps1',
|
||||
'Join-Worksheet.ps1',
|
||||
'Merge-Worksheet.ps1',
|
||||
'New-ConditionalFormattingIconSet.ps1',
|
||||
'New-ConditionalText.ps1',
|
||||
'New-ExcelChart.ps1',
|
||||
'New-PSItem.ps1',
|
||||
'Open-ExcelPackage.ps1',
|
||||
'Pivot.ps1',
|
||||
'PivotTable.ps1',
|
||||
'Plot.ps1',
|
||||
'RemoveWorksheet.ps1',
|
||||
'Send-SQLDataToExcel.ps1',
|
||||
'Set-CellStyle.ps1',
|
||||
'Set-Column.ps1',
|
||||
'Set-Row.ps1',
|
||||
'Set-WorkSheetProtection.ps1',
|
||||
'SetFormat.ps1',
|
||||
'TrackingUtils.ps1',
|
||||
'Update-FirstObjectProperties.ps1'
|
||||
)
|
||||
$ExcludeFiles = @(
|
||||
'Install.ps1'
|
||||
)
|
||||
|
||||
Begin {
|
||||
Try {
|
||||
Write-Verbose "$ModuleName module installation started"
|
||||
|
||||
$Files = @(
|
||||
'AddConditionalFormatting.ps1',
|
||||
'Charting.ps1',
|
||||
'ColorCompletion.ps1',
|
||||
'ConvertFromExcelData.ps1',
|
||||
'ConvertFromExcelToSQLInsert.ps1',
|
||||
'ConvertExcelToImageFile.ps1',
|
||||
'ConvertToExcelXlsx.ps1',
|
||||
'Copy-ExcelWorkSheet.ps1',
|
||||
'EPPlus.dll',
|
||||
'Export-charts.ps1',
|
||||
'Export-Excel.ps1',
|
||||
'Export-ExcelSheet.ps1',
|
||||
'formatting.ps1',
|
||||
'Get-ExcelColumnName.ps1',
|
||||
'Get-ExcelSheetInfo.ps1',
|
||||
'Get-ExcelWorkbookInfo.ps1',
|
||||
'Get-HtmlTable.ps1',
|
||||
'Get-Range.ps1',
|
||||
'Get-XYRange.ps1',
|
||||
'Import-Html.ps1',
|
||||
'ImportExcel.psd1',
|
||||
'ImportExcel.psm1',
|
||||
'InferData.ps1',
|
||||
'Invoke-Sum.ps1',
|
||||
'New-ConditionalFormattingIconSet.ps1',
|
||||
'New-ConditionalText.ps1',
|
||||
'New-ExcelChart.ps1',
|
||||
'New-PSItem.ps1',
|
||||
'Open-ExcelPackage.ps1',
|
||||
'Pivot.ps1',
|
||||
'plot.ps1',
|
||||
'Send-SqlDataToExcel.ps1',
|
||||
'Set-CellStyle.ps1',
|
||||
'Set-Column.ps1',
|
||||
'Set-Row.ps1',
|
||||
'SetFormat.ps1',
|
||||
'TrackingUtils.ps1',
|
||||
'Update-FirstObjectProperties.ps1'
|
||||
)
|
||||
function Invoke-MultiLike {
|
||||
[alias("LikeAny")]
|
||||
[CmdletBinding()]
|
||||
param
|
||||
(
|
||||
$InputObject,
|
||||
[Parameter(Mandatory)]
|
||||
[String[]]$Filters,
|
||||
[Switch]$Not
|
||||
)
|
||||
$FiltersRegex = foreach ($Filter In $Filters) {
|
||||
$Filter = [regex]::Escape($Filter)
|
||||
if ($Filter -match "^\\\*") {
|
||||
$Filter = $Filter.Remove(0, 2)
|
||||
}
|
||||
else {
|
||||
$Filter = '^' + $Filter
|
||||
}
|
||||
if ($Filter -match "\\\*$") {
|
||||
$Filter = $Filter.Substring(0, $Filter.Length - 2)
|
||||
}
|
||||
else {
|
||||
$Filter = $Filter + '$'
|
||||
}
|
||||
$Filter
|
||||
}
|
||||
Catch {
|
||||
throw "Failed installing the module in the install directory '$InstallDirectory': $_"
|
||||
if ($Not) {
|
||||
$InputObject -notmatch ($FiltersRegex -join '|').replace('\*', '.*').replace('\?', '.')
|
||||
}
|
||||
else {
|
||||
$InputObject -match ($FiltersRegex -join '|').replace('\*', '.*').replace('\?', '.')
|
||||
}
|
||||
}
|
||||
|
||||
Process {
|
||||
Try {
|
||||
if (-not $InstallDirectory) {
|
||||
Write-Verbose "$ModuleName no installation directory provided"
|
||||
Try {
|
||||
Write-Verbose -Message 'Module installation started'
|
||||
|
||||
$PersonalModules = Join-Path -Path ([Environment]::GetFolderPath('MyDocuments')) -ChildPath WindowsPowerShell\Modules
|
||||
|
||||
if (($env:PSModulePath -split ';') -notcontains $PersonalModules) {
|
||||
Write-Warning "$ModuleName personal module path '$PersonalModules' not found in '`$env:PSModulePath'"
|
||||
}
|
||||
|
||||
if (-not (Test-Path $PersonalModules)) {
|
||||
Write-Error "$ModuleName path '$PersonalModules' does not exist"
|
||||
}
|
||||
|
||||
$InstallDirectory = Join-Path -Path $PersonalModules -ChildPath $ModuleName
|
||||
Write-Verbose "$ModuleName default installation directory is '$InstallDirectory'"
|
||||
if (!$ModulePath) {
|
||||
if ($Scope -eq 'CurrentUser') {
|
||||
$ModulePathIndex = 0
|
||||
}
|
||||
|
||||
if (-not (Test-Path $InstallDirectory)) {
|
||||
$null = New-Item -Path $InstallDirectory -ItemType Directory -EA Stop
|
||||
Write-Verbose "$ModuleName created module folder '$InstallDirectory'"
|
||||
else {
|
||||
$ModulePathIndex = 1
|
||||
}
|
||||
|
||||
$WebClient = New-Object System.Net.WebClient
|
||||
|
||||
$Files | ForEach-Object {
|
||||
$WebClient.DownloadFile("$GitPath/$_","$installDirectory\$_")
|
||||
Write-Verbose "$ModuleName installed module file '$_'"
|
||||
if ($IsLinux -or $IsMacOS) {
|
||||
$ModulePathSeparator = ':'
|
||||
}
|
||||
|
||||
Write-Verbose "$ModuleName module installation successful"
|
||||
else {
|
||||
$ModulePathSeparator = ';'
|
||||
}
|
||||
$ModulePath = ($env:PSModulePath -split $ModulePathSeparator)[$ModulePathIndex]
|
||||
}
|
||||
Catch {
|
||||
throw "Failed installing the module in the install directory '$InstallDirectory': $_"
|
||||
|
||||
# Get $ModuleName, $TargetPath, [$Links]
|
||||
if ($FromGitHub) {
|
||||
# Fix Could not create SSL/TLS secure channel
|
||||
#$SecurityProtocol = [Net.ServicePointManager]::SecurityProtocol
|
||||
#[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
|
||||
|
||||
$WebClient = [System.Net.WebClient]::new()
|
||||
$GitUri = $FromGitHub.AbsolutePath.Split('/')[1, 2] -join '/'
|
||||
$GitBranch = $FromGitHub.AbsolutePath.Split('/')[3]
|
||||
$Links = (Invoke-RestMethod -Uri "https://api.github.com/repos/$GitUri/contents" -Body @{ref = $GitBranch }) | Where-Object { (LikeAny $_.name $IncludeFiles) -and (LikeAny $_.name $ExcludeFiles -Not) }
|
||||
|
||||
$ModuleName = [System.IO.Path]::GetFileNameWithoutExtension(($Links | Where-Object { $_.name -like '*.psm1' }).name)
|
||||
$ModuleVersion = (. ([Scriptblock]::Create((Invoke-WebRequest -Uri ($Links | Where-Object { $_.name -eq "$ModuleName.psd1" }).download_url)))).ModuleVersion
|
||||
}
|
||||
else {
|
||||
$ModuleName = [System.IO.Path]::GetFileNameWithoutExtension((Get-ChildItem -File -Filter *.psm1 -Name -Path $PSScriptRoot))
|
||||
$ModuleVersion = (. ([Scriptblock]::Create((Get-Content -Path (Join-Path $PSScriptRoot "$ModuleName.psd1") | Out-String)))).ModuleVersion
|
||||
}
|
||||
$TargetPath = Join-Path -Path $ModulePath -ChildPath $ModuleName
|
||||
$TargetPath = Join-Path -Path $TargetPath -ChildPath $ModuleVersion
|
||||
|
||||
# Create Directory
|
||||
if (-not (Test-Path -Path $TargetPath)) {
|
||||
$null = New-Item -Path $TargetPath -ItemType Directory -ErrorAction Stop
|
||||
Write-Verbose -Message ('Created module folder: "{0}"' -f $TargetPath)
|
||||
}
|
||||
|
||||
# Copy Files
|
||||
if ($FromGitHub) {
|
||||
foreach ($Link in $Links) {
|
||||
$TargetPathItem = Join-Path -Path $TargetPath -ChildPath $Link.name
|
||||
if ($Link.type -ne 'dir') {
|
||||
$WebClient.DownloadFile($Link.download_url, $TargetPathItem)
|
||||
Write-Verbose -Message ('Installed module file: "{0}"' -f $Link.name)
|
||||
}
|
||||
else {
|
||||
if (-not (Test-Path -Path $TargetPathItem)) {
|
||||
$null = New-Item -Path $TargetPathItem -ItemType Directory -ErrorAction Stop
|
||||
Write-Verbose -Message 'Created module folder: "{0}"' -f $TargetPathItem
|
||||
}
|
||||
$SubLinks = (Invoke-RestMethod -Uri $Link.git_url -Body @{recursive = '1' }).tree
|
||||
foreach ($SubLink in $SubLinks) {
|
||||
$TargetPathSub = Join-Path -Path $TargetPathItem -ChildPath $SubLink.path
|
||||
if ($SubLink.'type' -EQ 'tree') {
|
||||
if (-not (Test-Path -Path $TargetPathSub)) {
|
||||
$null = New-Item -Path $TargetPathSub -ItemType Directory -ErrorAction Stop
|
||||
Write-Verbose -Message 'Created module folder: "{0}"' -f $TargetPathSub
|
||||
}
|
||||
}
|
||||
else {
|
||||
$WebClient.DownloadFile(
|
||||
('https://raw.githubusercontent.com/{0}/{1}/{2}/{3}' -f $GitUri, $GitBranch, $Link.name, $SubLink.path),
|
||||
$TargetPathSub
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
Get-ChildItem -Path $PSScriptRoot -Exclude $ExcludeFiles | Where-Object { LikeAny $_.Name $IncludeFiles } | ForEach-Object {
|
||||
if ($_.Attributes -ne 'Directory') {
|
||||
Copy-Item -Path $_ -Destination $TargetPath
|
||||
Write-Verbose -Message ('Installed module file "{0}"' -f $_)
|
||||
}
|
||||
else {
|
||||
Copy-Item -Path $_ -Destination $TargetPath -Recurse -Force
|
||||
Write-Verbose -Message ('Installed module folder "{0}"' -f $_)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# Import Module
|
||||
Write-Verbose -Message "$ModuleName module installation successful to $TargetPath"
|
||||
Import-Module -Name $ModuleName -Force
|
||||
Write-Verbose -Message "Module installed"
|
||||
}
|
||||
Catch {
|
||||
throw ('Failed installing module "{0}". Error: "{1}" in Line {2}' -f $ModuleName, $_, $_.InvocationInfo.ScriptLineNumber)
|
||||
}
|
||||
finally {
|
||||
#if ($FromGitHub) {
|
||||
# [Net.ServicePointManager]::SecurityProtocol = $SecurityProtocol
|
||||
#}
|
||||
Write-Verbose -Message 'Module installation end'
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
$fullPath = 'C:\Program Files\WindowsPowerShell\Modules\ImportExcel'
|
||||
|
||||
Robocopy . $fullPath /mir /XD .vscode .git examples testimonials images spikes /XF appveyor.yml .gitattributes .gitignore
|
||||
@@ -1,7 +0,0 @@
|
||||
$p = @{
|
||||
Name = "ImportExcel"
|
||||
NuGetApiKey = $NuGetApiKey
|
||||
ReleaseNote = "Add NumberFormat parameter"
|
||||
}
|
||||
|
||||
Publish-Module @p
|
||||
12
README.md
12
README.md
@@ -15,11 +15,13 @@ If this project helped you reduce the time to get your job done, let me know.
|
||||
<a href="./LICENSE.txt"><img src="https://img.shields.io/badge/License-Apache%202.0-blue.svg"></a>
|
||||
</p>
|
||||
|
||||
|CI System |OS|Status|
|
||||
|---|---|---|
|
||||
|Azure DevOps|Windows|[](https://dougfinke.visualstudio.com/ImportExcel/_build/latest?definitionId=10)|
|
||||
|Azure DevOps|Windows, Linux, Mac|[](https://dougfinke.visualstudio.com/ImportExcel/_build/latest?definitionId=20&branchName=master)|
|
||||
|Appveyor|Windows|[](https://ci.appveyor.com/project/dfinke/importexcel/branch/master)|
|
||||
| CI System | Environment | Status |
|
||||
|--------------|-------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| AppVeyor | Windows, Core preview, Ubuntu | [](https://ci.appveyor.com/project/ili101/Module-Template) |
|
||||
| Azure DevOps | Windows | [](https://dev.azure.com/ili101/ImportExcel/_build/latest?definitionId=1&branchName=Tests) |
|
||||
| Azure DevOps | Windows (Core) | [](https://dev.azure.com/ili101/ImportExcel/_build/latest?definitionId=1&branchName=Tests) |
|
||||
| Azure DevOps | Ubuntu | [](https://dev.azure.com/ili101/ImportExcel/_build/latest?definitionId=1&branchName=Tests) |
|
||||
| Azure DevOps | macOS | [](https://dev.azure.com/ili101/ImportExcel/_build/latest?definitionId=1&branchName=Tests) |
|
||||
|
||||
<!-- /BADGES -->
|
||||
|
||||
|
||||
@@ -1,7 +1,4 @@
|
||||
Import-Module $PSScriptRoot\..\ImportExcel.psd1 -Force
|
||||
if (-not $env:TEMP) {$env:TEMP = [IO.Path]::GetTempPath() -replace "/$","" }
|
||||
$notWindows = ($PSVersionTable.os -and $PSVersionTable.os -notMatch 'Windows' )
|
||||
Describe "Test adding trendlines to charts" {
|
||||
Describe "Test adding trendlines to charts" {
|
||||
BeforeAll {
|
||||
$script:data = ConvertFrom-Csv @"
|
||||
Region,Item,TotalSold
|
||||
@@ -20,7 +17,7 @@ South,avocado,73
|
||||
}
|
||||
|
||||
BeforeEach {
|
||||
$xlfile = "$env:TEMP\trendLine.xlsx"
|
||||
$xlfile = "TestDrive:\trendLine.xlsx"
|
||||
Remove-Item $xlfile -ErrorAction SilentlyContinue
|
||||
}
|
||||
|
||||
|
||||
132
__tests__/CI.ps1
Normal file
132
__tests__/CI.ps1
Normal file
@@ -0,0 +1,132 @@
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Handel Continuous Integration Testing in AppVeyor and Azure DevOps Pipelines.
|
||||
#>
|
||||
param
|
||||
(
|
||||
# AppVeyor Only - Update AppVeyor build name.
|
||||
[Switch]$Initialize,
|
||||
# Installs the module and invoke the Pester tests with the current version of PowerShell.
|
||||
[Switch]$Test,
|
||||
# AppVeyor Only - Upload results to AppVeyor "Tests" tab.
|
||||
[Switch]$Finalize,
|
||||
# AppVeyor and Azure - Upload module as AppVeyor Artifact.
|
||||
[Switch]$Artifact
|
||||
)
|
||||
$ErrorActionPreference = 'Stop'
|
||||
if ($Initialize) {
|
||||
$Psd1 = (Get-ChildItem -File -Filter *.psd1 -Name -Path (Split-Path $PSScriptRoot)).PSPath
|
||||
$ModuleVersion = (. ([Scriptblock]::Create((Get-Content -Path $Psd1 | Out-String)))).ModuleVersion
|
||||
Update-AppveyorBuild -Version "$ModuleVersion ($env:APPVEYOR_BUILD_NUMBER) $env:APPVEYOR_REPO_BRANCH"
|
||||
}
|
||||
if ($Test) {
|
||||
function Get-EnvironmentInfo {
|
||||
if ($null -eq $IsWindows -or $IsWindows) {
|
||||
# Get Windows Version
|
||||
try {
|
||||
$WinRelease, $WinVer = Get-ItemPropertyValue "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" ReleaseId, CurrentMajorVersionNumber, CurrentMinorVersionNumber, CurrentBuildNumber, UBR
|
||||
$WindowsVersion = "$($WinVer -join '.') ($WinRelease)"
|
||||
}
|
||||
catch {
|
||||
$WindowsVersion = [System.Environment]::OSVersion.Version
|
||||
}
|
||||
|
||||
# Get .Net Version
|
||||
# https://stackoverflow.com/questions/3487265/powershell-script-to-return-versions-of-net-framework-on-a-machine
|
||||
$Lookup = @{
|
||||
378389 = [version]'4.5'
|
||||
378675 = [version]'4.5.1'
|
||||
378758 = [version]'4.5.1'
|
||||
379893 = [version]'4.5.2'
|
||||
393295 = [version]'4.6'
|
||||
393297 = [version]'4.6'
|
||||
394254 = [version]'4.6.1'
|
||||
394271 = [version]'4.6.1'
|
||||
394802 = [version]'4.6.2'
|
||||
394806 = [version]'4.6.2'
|
||||
460798 = [version]'4.7'
|
||||
460805 = [version]'4.7'
|
||||
461308 = [version]'4.7.1'
|
||||
461310 = [version]'4.7.1'
|
||||
461808 = [version]'4.7.2'
|
||||
461814 = [version]'4.7.2'
|
||||
528040 = [version]'4.8'
|
||||
528049 = [version]'4.8'
|
||||
}
|
||||
|
||||
# For One True framework (latest .NET 4x), change the Where-Object match
|
||||
# to PSChildName -eq "Full":
|
||||
$DotNetVersion = Get-ChildItem 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP' -Recurse |
|
||||
Get-ItemProperty -name Version, Release -EA 0 |
|
||||
Where-Object { $_.PSChildName -eq "Full" } |
|
||||
Select-Object @{name = ".NET Framework"; expression = { $_.PSChildName } },
|
||||
@{name = "Product"; expression = { $Lookup[$_.Release] } },
|
||||
Version, Release
|
||||
|
||||
# Output
|
||||
[PSCustomObject]($PSVersionTable + @{
|
||||
ComputerName = $env:Computername
|
||||
WindowsVersion = $WindowsVersion
|
||||
'.Net Version' = '{0} (Version: {1}, Release: {2})' -f $DotNetVersion.Product, $DotNetVersion.Version, $DotNetVersion.Release
|
||||
#EnvironmentPath = $env:Path
|
||||
})
|
||||
}
|
||||
else {
|
||||
# Output
|
||||
[PSCustomObject]($PSVersionTable + @{
|
||||
ComputerName = $env:Computername
|
||||
#EnvironmentPath = $env:Path
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
'[Info] Testing On:'
|
||||
Get-EnvironmentInfo
|
||||
'[Progress] Installing Module.'
|
||||
. .\Install.ps1
|
||||
'[Progress] Invoking Pester.'
|
||||
Invoke-Pester -OutputFile ('TestResultsPS{0}.xml' -f $PSVersionTable.PSVersion)
|
||||
}
|
||||
if ($Finalize) {
|
||||
'[Progress] Finalizing.'
|
||||
$Failure = $false
|
||||
$AppVeyorResultsUri = 'https://ci.appveyor.com/api/testresults/nunit/{0}' -f $env:APPVEYOR_JOB_ID
|
||||
foreach ($TestResultsFile in Get-ChildItem -Path 'TestResultsPS*.xml') {
|
||||
$TestResultsFilePath = $TestResultsFile.FullName
|
||||
"[Info] Uploading Files: $AppVeyorResultsUri, $TestResultsFilePath."
|
||||
# Add PowerShell version to test results
|
||||
$PSVersion = $TestResultsFile.Name.Replace('TestResults', '').Replace('.xml', '')
|
||||
[Xml]$Xml = Get-Content -Path $TestResultsFilePath
|
||||
Select-Xml -Xml $Xml -XPath '//test-case' | ForEach-Object { $_.Node.name = "$PSVersion " + $_.Node.name }
|
||||
$Xml.OuterXml | Out-File -FilePath $TestResultsFilePath
|
||||
|
||||
#Invoke-RestMethod -Method Post -Uri $AppVeyorResultsUri -Body $Xml
|
||||
[Net.WebClient]::new().UploadFile($AppVeyorResultsUri, $TestResultsFilePath)
|
||||
|
||||
if ($Xml.'test-results'.failures -ne '0') {
|
||||
$Failure = $true
|
||||
}
|
||||
}
|
||||
if ($Failure) {
|
||||
throw 'Tests failed.'
|
||||
}
|
||||
}
|
||||
if ($Artifact) {
|
||||
# Get Module Info
|
||||
$ModuleName = [System.IO.Path]::GetFileNameWithoutExtension((Get-ChildItem -File -Filter *.psm1 -Name -Path (Split-Path $PSScriptRoot)))
|
||||
$ModulePath = (Get-Module -Name $ModuleName -ListAvailable).ModuleBase | Split-Path
|
||||
$VersionLocal = ((Get-Module -Name $ModuleName -ListAvailable).Version | Measure-Object -Maximum).Maximum
|
||||
"[Progress] Artifact Start for Module: $ModuleName, Version: $VersionLocal."
|
||||
if ($env:APPVEYOR) {
|
||||
$ZipFileName = "{0} {1} {2} {3:yyyy-MM-dd HH-mm-ss}.zip" -f $ModuleName, $VersionLocal, $env:APPVEYOR_REPO_BRANCH, (Get-Date)
|
||||
$ZipFileFullPath = Join-Path -Path $PSScriptRoot -ChildPath $ZipFileName
|
||||
"[Info] Artifact. $ModuleName, ZipFileName: $ZipFileName."
|
||||
#Compress-Archive -Path $ModulePath -DestinationPath $ZipFileFullPath
|
||||
[System.IO.Compression.ZipFile]::CreateFromDirectory($ModulePath, $ZipFileFullPath, [System.IO.Compression.CompressionLevel]::Optimal, $true)
|
||||
Push-AppveyorArtifact $ZipFileFullPath -DeploymentName $ModuleName
|
||||
}
|
||||
elseif ($env:AGENT_NAME) {
|
||||
#Write-Host "##vso[task.setvariable variable=ModuleName]$ModuleName"
|
||||
Copy-Item -Path $ModulePath -Destination $env:Build_ArtifactStagingDirectory -Recurse
|
||||
}
|
||||
}
|
||||
@@ -1,28 +1,32 @@
|
||||
#Requires -Modules Pester
|
||||
if ($PSVersionTable.os -and $PSVersionTable.os -notMatch 'Windows' ) {return} #Currently this test outputs windows services so only run on Windows.
|
||||
if (-not $env:TEMP) {$env:TEMP = [IO.Path]::GetTempPath() }
|
||||
Import-Module $PSScriptRoot\..\ImportExcel.psd1 -Force
|
||||
if ($PSVersionTable.PSVersion.Major -gt 5) { Write-Warning "Can't test grid view on V6 and later" }
|
||||
else {Add-Type -AssemblyName System.Windows.Forms }
|
||||
#Import-Module $PSScriptRoot\..\ImportExcel.psd1 -Force
|
||||
|
||||
Describe "Compare Worksheet" {
|
||||
Context "Simple comparison output" {
|
||||
BeforeAll {
|
||||
Remove-Item -Path "$env:temp\server*.xlsx"
|
||||
[System.Collections.ArrayList]$s = get-service | Select-Object -first 25 -Property Name, RequiredServices, CanPauseAndContinue, CanShutdown, CanStop, DisplayName, DependentServices, MachineName
|
||||
$s | Export-Excel -Path $env:temp\server1.xlsx
|
||||
#$s is a zero based array, excel rows are 1 based and excel has a header row so Excel rows will be 2 + index in $s
|
||||
$row4Displayname = $s[2].DisplayName
|
||||
$s[2].DisplayName = "Changed from the orginal"
|
||||
$d = $s[-1] | Select-Object -Property *
|
||||
$d.DisplayName = "Dummy Service"
|
||||
$d.Name = "Dummy"
|
||||
$s.Insert(3,$d)
|
||||
$row6Name = $s[5].name
|
||||
$s.RemoveAt(5)
|
||||
$s | Export-Excel -Path $env:temp\server2.xlsx
|
||||
#Assume default worksheet name, (sheet1) and column header for key ("name")
|
||||
$comp = compare-WorkSheet "$env:temp\server1.xlsx" "$env:temp\server2.xlsx" | Sort-Object -Property _row, _file
|
||||
BeforeAll {
|
||||
if ($PSVersionTable.PSVersion.Major -gt 5) {
|
||||
It "GridView Support" {
|
||||
Set-ItResult -Pending -Because "Can't test grid view on V6 and later"
|
||||
}
|
||||
}
|
||||
else { Add-Type -AssemblyName System.Windows.Forms }
|
||||
. "$PSScriptRoot\Samples\Samples.ps1"
|
||||
Remove-Item -Path "TestDrive:\server*.xlsx"
|
||||
[System.Collections.ArrayList]$s = get-service | Select-Object -first 25 -Property Name, RequiredServices, CanPauseAndContinue, CanShutdown, CanStop, DisplayName, DependentServices, MachineName
|
||||
$s | Export-Excel -Path TestDrive:\server1.xlsx
|
||||
#$s is a zero based array, excel rows are 1 based and excel has a header row so Excel rows will be 2 + index in $s
|
||||
$row4Displayname = $s[2].DisplayName
|
||||
$s[2].DisplayName = "Changed from the orginal"
|
||||
$d = $s[-1] | Select-Object -Property *
|
||||
$d.DisplayName = "Dummy Service"
|
||||
$d.Name = "Dummy"
|
||||
$s.Insert(3,$d)
|
||||
$row6Name = $s[5].name
|
||||
$s.RemoveAt(5)
|
||||
$s | Export-Excel -Path TestDrive:\server2.xlsx
|
||||
#Assume default worksheet name, (sheet1) and column header for key ("name")
|
||||
$comp = compare-WorkSheet "TestDrive:\server1.xlsx" "TestDrive:\server2.xlsx" | Sort-Object -Property _row, _file
|
||||
}
|
||||
Context "Simple comparison output" {
|
||||
it "Found the right number of differences " {
|
||||
$comp | should not beNullOrEmpty
|
||||
$comp.Count | should be 4
|
||||
@@ -57,13 +61,13 @@ Describe "Compare Worksheet" {
|
||||
$ModulePath = (Get-Command -Name 'Compare-WorkSheet').Module.Path
|
||||
$PowerShellExec = if ($PSEdition -eq 'Core') {'pwsh.exe'} else {'powershell.exe'}
|
||||
$PowerShellPath = Join-Path -Path $PSHOME -ChildPath $PowerShellExec
|
||||
. $PowerShellPath -Command ("Import-Module $ModulePath; " + '$null = Compare-WorkSheet "$env:temp\server1.xlsx" "$env:temp\server2.xlsx" -BackgroundColor ([System.Drawing.Color]::LightGreen) -GridView; Start-Sleep -sec 5')
|
||||
. $PowerShellPath -Command ('Import-Module {0}; $null = Compare-WorkSheet "{1}server1.xlsx" "{1}server2.xlsx" -BackgroundColor ([System.Drawing.Color]::LightGreen) -GridView; Start-Sleep -sec 5' -f $ModulePath, (Resolve-Path 'TestDrive:').ProviderPath)
|
||||
}
|
||||
else {
|
||||
$null = Compare-WorkSheet "$env:temp\server1.xlsx" "$env:temp\server2.xlsx" -BackgroundColor ([System.Drawing.Color]::LightGreen) -GridView:$useGrid
|
||||
$null = Compare-WorkSheet "TestDrive:\server1.xlsx" "TestDrive:\server2.xlsx" -BackgroundColor ([System.Drawing.Color]::LightGreen) -GridView:$useGrid
|
||||
}
|
||||
$xl1 = Open-ExcelPackage -Path "$env:temp\server1.xlsx"
|
||||
$xl2 = Open-ExcelPackage -Path "$env:temp\server2.xlsx"
|
||||
$xl1 = Open-ExcelPackage -Path "TestDrive:\server1.xlsx"
|
||||
$xl2 = Open-ExcelPackage -Path "TestDrive:\server2.xlsx"
|
||||
$s1Sheet = $xl1.Workbook.Worksheets[1]
|
||||
$s2Sheet = $xl2.Workbook.Worksheets[1]
|
||||
}
|
||||
@@ -87,9 +91,9 @@ Describe "Compare Worksheet" {
|
||||
|
||||
Context "Setting the forgound to highlight changed properties" {
|
||||
BeforeAll {
|
||||
$null = compare-WorkSheet "$env:temp\server1.xlsx" "$env:temp\server2.xlsx" -AllDataBackgroundColor([System.Drawing.Color]::white) -BackgroundColor ([System.Drawing.Color]::LightGreen) -FontColor ([System.Drawing.Color]::DarkRed)
|
||||
$xl1 = Open-ExcelPackage -Path "$env:temp\server1.xlsx"
|
||||
$xl2 = Open-ExcelPackage -Path "$env:temp\server2.xlsx"
|
||||
$null = compare-WorkSheet "TestDrive:\server1.xlsx" "TestDrive:\server2.xlsx" -AllDataBackgroundColor([System.Drawing.Color]::white) -BackgroundColor ([System.Drawing.Color]::LightGreen) -FontColor ([System.Drawing.Color]::DarkRed)
|
||||
$xl1 = Open-ExcelPackage -Path "TestDrive:\server1.xlsx"
|
||||
$xl2 = Open-ExcelPackage -Path "TestDrive:\server2.xlsx"
|
||||
$s1Sheet = $xl1.Workbook.Worksheets[1]
|
||||
$s2Sheet = $xl2.Workbook.Worksheets[1]
|
||||
}
|
||||
@@ -118,7 +122,7 @@ Describe "Compare Worksheet" {
|
||||
BeforeAll {
|
||||
[System.Collections.ArrayList]$s = get-service | Select-Object -first 25 -Property RequiredServices, CanPauseAndContinue, CanShutdown, CanStop,
|
||||
DisplayName, DependentServices, MachineName, ServiceName, ServicesDependedOn, ServiceHandle, Status, ServiceType, StartType -ExcludeProperty Name
|
||||
$s | Export-Excel -Path $env:temp\server1.xlsx -WorkSheetname Server1
|
||||
$s | Export-Excel -Path TestDrive:\server1.xlsx -WorkSheetname server1
|
||||
#$s is a zero based array, excel rows are 1 based and excel has a header row so Excel rows will be 2 + index in $s
|
||||
$row4Displayname = $s[2].DisplayName
|
||||
$s[2].DisplayName = "Changed from the orginal"
|
||||
@@ -130,11 +134,11 @@ Describe "Compare Worksheet" {
|
||||
$s.RemoveAt(5)
|
||||
$s[10].ServiceType = "Changed should not matter"
|
||||
|
||||
$s | Select-Object -Property ServiceName, DisplayName, StartType, ServiceType | Export-Excel -Path $env:temp\server2.xlsx -WorkSheetname server2
|
||||
$s | Select-Object -Property ServiceName, DisplayName, StartType, ServiceType | Export-Excel -Path TestDrive:\server2.xlsx -WorkSheetname server2
|
||||
#Assume default worksheet name, (sheet1) and column header for key ("name")
|
||||
$comp = compare-WorkSheet "$env:temp\server1.xlsx" "$env:temp\server2.xlsx" -WorkSheetName Server1,Server2 -Key ServiceName -Property DisplayName,StartType -AllDataBackgroundColor ([System.Drawing.Color]::AliceBlue) -BackgroundColor ([System.Drawing.Color]::White) -FontColor ([System.Drawing.Color]::Red) | Sort-Object _row,_file
|
||||
$xl1 = Open-ExcelPackage -Path "$env:temp\server1.xlsx"
|
||||
$xl2 = Open-ExcelPackage -Path "$env:temp\server2.xlsx"
|
||||
$comp = compare-WorkSheet "TestDrive:\server1.xlsx" "TestDrive:\server2.xlsx" -WorkSheetName server1,server2 -Key ServiceName -Property DisplayName,StartType -AllDataBackgroundColor ([System.Drawing.Color]::AliceBlue) -BackgroundColor ([System.Drawing.Color]::White) -FontColor ([System.Drawing.Color]::Red) | Sort-Object _row,_file
|
||||
$xl1 = Open-ExcelPackage -Path "TestDrive:\server1.xlsx"
|
||||
$xl2 = Open-ExcelPackage -Path "TestDrive:\server2.xlsx"
|
||||
$s1Sheet = $xl1.Workbook.Worksheets["server1"]
|
||||
$s2Sheet = $xl2.Workbook.Worksheets["server2"]
|
||||
}
|
||||
@@ -188,36 +192,36 @@ Describe "Compare Worksheet" {
|
||||
}
|
||||
|
||||
Describe "Merge Worksheet" {
|
||||
BeforeAll {
|
||||
Remove-Item -Path "TestDrive:\server*.xlsx" , "TestDrive:\combined*.xlsx" -ErrorAction SilentlyContinue
|
||||
[System.Collections.ArrayList]$s = get-service | Select-Object -first 25 -Property *
|
||||
|
||||
$s | Export-Excel -Path TestDrive:\server1.xlsx
|
||||
|
||||
#$s is a zero based array, excel rows are 1 based and excel has a header row so Excel rows will be 2 + index in $s
|
||||
$s[2].DisplayName = "Changed from the orginal"
|
||||
|
||||
$d = $s[-1] | Select-Object -Property *
|
||||
$d.DisplayName = "Dummy Service"
|
||||
$d.Name = "Dummy"
|
||||
$s.Insert(3,$d)
|
||||
|
||||
$s.RemoveAt(5)
|
||||
|
||||
$s | Export-Excel -Path TestDrive:\server2.xlsx
|
||||
#Assume default worksheet name, (sheet1) and column header for key ("name")
|
||||
Merge-Worksheet -Referencefile "TestDrive:\server1.xlsx" -Differencefile "TestDrive:\server2.xlsx" -OutputFile "TestDrive:\combined1.xlsx" -Property name,displayname,startType -Key name
|
||||
$excel = Open-ExcelPackage -Path "TestDrive:\combined1.xlsx"
|
||||
$ws = $excel.Workbook.Worksheets["sheet1"]
|
||||
}
|
||||
Context "Merge with 3 properties" {
|
||||
BeforeAll {
|
||||
Remove-Item -Path "$env:temp\server*.xlsx" , "$env:temp\combined*.xlsx" -ErrorAction SilentlyContinue
|
||||
[System.Collections.ArrayList]$s = get-service | Select-Object -first 25 -Property *
|
||||
|
||||
$s | Export-Excel -Path $env:temp\server1.xlsx
|
||||
|
||||
#$s is a zero based array, excel rows are 1 based and excel has a header row so Excel rows will be 2 + index in $s
|
||||
$s[2].DisplayName = "Changed from the orginal"
|
||||
|
||||
$d = $s[-1] | Select-Object -Property *
|
||||
$d.DisplayName = "Dummy Service"
|
||||
$d.Name = "Dummy"
|
||||
$s.Insert(3,$d)
|
||||
|
||||
$s.RemoveAt(5)
|
||||
|
||||
$s | Export-Excel -Path $env:temp\server2.xlsx
|
||||
#Assume default worksheet name, (sheet1) and column header for key ("name")
|
||||
Merge-Worksheet -Referencefile "$env:temp\server1.xlsx" -Differencefile "$env:temp\server2.xlsx" -OutputFile "$env:temp\combined1.xlsx" -Property name,displayname,startType -Key name
|
||||
$excel = Open-ExcelPackage -Path "$env:temp\combined1.xlsx"
|
||||
$ws = $excel.Workbook.Worksheets["sheet1"]
|
||||
}
|
||||
it "Created a worksheet with the correct headings " {
|
||||
$ws | should not beNullOrEmpty
|
||||
$ws.Cells[ 1,1].Value | Should be "name"
|
||||
$ws.Cells[ 1,2].Value | Should be "DisplayName"
|
||||
$ws.Cells[ 1,3].Value | Should be "StartType"
|
||||
$ws.Cells[ 1,4].Value | Should be "Server2 DisplayName"
|
||||
$ws.Cells[ 1,5].Value | Should be "Server2 StartType"
|
||||
$ws.Cells[ 1,4].Value | Should be "server2 DisplayName"
|
||||
$ws.Cells[ 1,5].Value | Should be "server2 StartType"
|
||||
}
|
||||
it "Joined the two sheets correctly " {
|
||||
$ws.Cells[ 2,2].Value | Should be $ws.Cells[ 2,4].Value
|
||||
@@ -249,16 +253,16 @@ Describe "Merge Worksheet" {
|
||||
}
|
||||
Context "Wider data set" {
|
||||
it "Coped with columns beyond Z in the Output sheet " {
|
||||
{ Merge-Worksheet -Referencefile "$env:temp\server1.xlsx" -Differencefile "$env:temp\server2.xlsx" -OutputFile "$env:temp\combined2.xlsx" } | Should not throw
|
||||
{ Merge-Worksheet -Referencefile "TestDrive:\server1.xlsx" -Differencefile "TestDrive:\server2.xlsx" -OutputFile "TestDrive:\combined2.xlsx" } | Should not throw
|
||||
}
|
||||
}
|
||||
}
|
||||
Describe "Merge Multiple sheets" {
|
||||
Context "Merge 3 sheets with 3 properties" {
|
||||
BeforeAll {
|
||||
Remove-Item -Path "$env:temp\server*.xlsx" , "$env:temp\combined*.xlsx" -ErrorAction SilentlyContinue
|
||||
Remove-Item -Path "TestDrive:\server*.xlsx" , "TestDrive:\combined*.xlsx" -ErrorAction SilentlyContinue
|
||||
[System.Collections.ArrayList]$s = get-service | Select-Object -first 25 -Property Name,DisplayName,StartType
|
||||
$s | Export-Excel -Path $env:temp\server1.xlsx
|
||||
$s | Export-Excel -Path TestDrive:\server1.xlsx
|
||||
|
||||
#$s is a zero based array, excel rows are 1 based and excel has a header row so Excel rows will be 2 + index in $s
|
||||
$row4Displayname = $s[2].DisplayName
|
||||
@@ -271,7 +275,7 @@ Describe "Merge Multiple sheets" {
|
||||
|
||||
$s.RemoveAt(5)
|
||||
|
||||
$s | Export-Excel -Path $env:temp\server2.xlsx
|
||||
$s | Export-Excel -Path TestDrive:\server2.xlsx
|
||||
|
||||
$s[2].displayname = $row4Displayname
|
||||
|
||||
@@ -281,22 +285,22 @@ Describe "Merge Multiple sheets" {
|
||||
$s.Insert(6,$d)
|
||||
$s.RemoveAt(8)
|
||||
|
||||
$s | Export-Excel -Path $env:temp\server3.xlsx
|
||||
$s | Export-Excel -Path TestDrive:\server3.xlsx
|
||||
|
||||
Merge-MultipleSheets -Path "$env:temp\server1.xlsx", "$env:temp\server2.xlsx","$env:temp\server3.xlsx" -OutputFile "$env:temp\combined3.xlsx" -Property name,displayname,startType -Key name
|
||||
$excel = Open-ExcelPackage -Path "$env:temp\combined3.xlsx"
|
||||
Merge-MultipleSheets -Path "TestDrive:\server1.xlsx", "TestDrive:\server2.xlsx","TestDrive:\server3.xlsx" -OutputFile "TestDrive:\combined3.xlsx" -Property name,displayname,startType -Key name
|
||||
$excel = Open-ExcelPackage -Path "TestDrive:\combined3.xlsx"
|
||||
$ws = $excel.Workbook.Worksheets["sheet1"]
|
||||
|
||||
}
|
||||
it "Created a worksheet with the correct headings " {
|
||||
$ws | Should not beNullOrEmpty
|
||||
$ws.Cells[ 1,2 ].Value | Should be "name"
|
||||
$ws.Cells[ 1,3 ].Value | Should be "Server1 DisplayName"
|
||||
$ws.Cells[ 1,4 ].Value | Should be "Server1 StartType"
|
||||
$ws.Cells[ 1,5 ].Value | Should be "Server2 DisplayName"
|
||||
$ws.Cells[ 1,6 ].Value | Should be "Server2 StartType"
|
||||
$ws.Cells[ 1,3 ].Value | Should be "server1 DisplayName"
|
||||
$ws.Cells[ 1,4 ].Value | Should be "server1 StartType"
|
||||
$ws.Cells[ 1,5 ].Value | Should be "server2 DisplayName"
|
||||
$ws.Cells[ 1,6 ].Value | Should be "server2 StartType"
|
||||
$ws.Column(7).hidden | Should be $true
|
||||
$ws.Cells[ 1,8].Value | Should be "Server2 Row"
|
||||
$ws.Cells[ 1,8].Value | Should be "server2 Row"
|
||||
$ws.Cells[ 1,9 ].Value | Should be "server3 DisplayName"
|
||||
$ws.Cells[ 1,10].Value | Should be "server3 StartType"
|
||||
$ws.Column(11).hidden | Should be $true
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
Import-Module $PSScriptRoot\..\ImportExcel.psd1 -Force
|
||||
if (-not $env:TEMP) {$env:TEMP = [IO.Path]::GetTempPath() -replace "/$","" }
|
||||
$xlFile = "$env:TEMP\testSQL.xlsx"
|
||||
#Import-Module $PSScriptRoot\..\ImportExcel.psd1 -Force
|
||||
|
||||
$xlFile = "TestDrive:\testSQL.xlsx"
|
||||
|
||||
Describe "ConvertFrom-ExcelToSQLInsert" {
|
||||
|
||||
|
||||
@@ -1,39 +1,36 @@
|
||||
if ($PSVersionTable.os -and $PSVersionTable.os -notMatch 'Windows' ) {return} #Currently this test outputs windows services so only run on Windows.
|
||||
if (-not $env:TEMP) {$env:TEMP = [IO.Path]::GetTempPath() -replace "/$","" }
|
||||
|
||||
$path1 = "$env:TEMP\Test1.xlsx"
|
||||
$path2 = "$env:TEMP\Test2.xlsx"
|
||||
Remove-item -Path $path1, $path2 -ErrorAction SilentlyContinue
|
||||
|
||||
$ProcRange = Get-Process | Export-Excel $path1 -DisplayPropertySet -WorkSheetname Processes -ReturnRange
|
||||
|
||||
if ((Get-Culture).NumberFormat.CurrencySymbol -eq "£") {$OtherCurrencySymbol = "$"}
|
||||
else {$OtherCurrencySymbol = "£"}
|
||||
[PSCustOmobject][Ordered]@{
|
||||
Date = Get-Date
|
||||
Formula1 = '=SUM(F2:G2)'
|
||||
String1 = 'My String'
|
||||
Float = [math]::pi
|
||||
IPAddress = '10.10.25.5'
|
||||
StrLeadZero = '07670'
|
||||
StrComma = '0,26'
|
||||
StrEngThousand = '1,234.56'
|
||||
StrEuroThousand = '1.555,83'
|
||||
StrDot = '1.2'
|
||||
StrNegInt = '-31'
|
||||
StrTrailingNeg = '31-'
|
||||
StrParens = '(123)'
|
||||
strLocalCurrency = ('{0}123.45' -f (Get-Culture).NumberFormat.CurrencySymbol )
|
||||
strOtherCurrency = ('{0}123.45' -f $OtherCurrencySymbol )
|
||||
StrE164Phone = '+32 (444) 444 4444'
|
||||
StrAltPhone1 = '+32 4 4444 444'
|
||||
StrAltPhone2 = '+3244444444'
|
||||
StrLeadSpace = ' 123'
|
||||
StrTrailSpace = '123 '
|
||||
Link1 = [uri]"https://github.com/dfinke/ImportExcel"
|
||||
Link2 = "https://github.com/dfinke/ImportExcel" # Links are not copied correctly, hopefully this will be fixed at some future date
|
||||
} | Export-Excel -NoNumberConversion IPAddress, StrLeadZero, StrAltPhone2 -WorkSheetname MixedTypes -Path $path2
|
||||
Describe "Copy-Worksheet" {
|
||||
$path1 = "TestDrive:\Test1.xlsx"
|
||||
$path2 = "TestDrive:\Test2.xlsx"
|
||||
Remove-Item -Path $path1, $path2 -ErrorAction SilentlyContinue
|
||||
|
||||
$ProcRange = Get-Process | Export-Excel $path1 -DisplayPropertySet -WorkSheetname Processes -ReturnRange
|
||||
|
||||
if ((Get-Culture).NumberFormat.CurrencySymbol -eq "£") { $OtherCurrencySymbol = "$" }
|
||||
else { $OtherCurrencySymbol = "£" }
|
||||
[PSCustOmobject][Ordered]@{
|
||||
Date = Get-Date
|
||||
Formula1 = '=SUM(F2:G2)'
|
||||
String1 = 'My String'
|
||||
Float = [math]::pi
|
||||
IPAddress = '10.10.25.5'
|
||||
StrLeadZero = '07670'
|
||||
StrComma = '0,26'
|
||||
StrEngThousand = '1,234.56'
|
||||
StrEuroThousand = '1.555,83'
|
||||
StrDot = '1.2'
|
||||
StrNegInt = '-31'
|
||||
StrTrailingNeg = '31-'
|
||||
StrParens = '(123)'
|
||||
strLocalCurrency = ('{0}123.45' -f (Get-Culture).NumberFormat.CurrencySymbol )
|
||||
strOtherCurrency = ('{0}123.45' -f $OtherCurrencySymbol )
|
||||
StrE164Phone = '+32 (444) 444 4444'
|
||||
StrAltPhone1 = '+32 4 4444 444'
|
||||
StrAltPhone2 = '+3244444444'
|
||||
StrLeadSpace = ' 123'
|
||||
StrTrailSpace = '123 '
|
||||
Link1 = [uri]"https://github.com/dfinke/ImportExcel"
|
||||
Link2 = "https://github.com/dfinke/ImportExcel" # Links are not copied correctly, hopefully this will be fixed at some future date
|
||||
} | Export-Excel -NoNumberConversion IPAddress, StrLeadZero, StrAltPhone2 -WorkSheetname MixedTypes -Path $path2
|
||||
Context "Simplest copy" {
|
||||
BeforeAll {
|
||||
Copy-ExcelWorkSheet -SourceWorkbook $path1 -DestinationWorkbook $path2
|
||||
@@ -91,8 +88,8 @@ Describe "Copy-Worksheet" {
|
||||
|
||||
Context "Copy worksheet should close all files" {
|
||||
BeforeAll {
|
||||
$xlfile = "$env:TEMP\reports.xlsx"
|
||||
$xlfileArchive = "$env:TEMP\reportsArchive.xlsx"
|
||||
$xlfile = "TestDrive:\reports.xlsx"
|
||||
$xlfileArchive = "TestDrive:\reportsArchive.xlsx"
|
||||
|
||||
Remove-Item $xlfile -ErrorAction SilentlyContinue
|
||||
Remove-Item $xlfileArchive -ErrorAction SilentlyContinue
|
||||
@@ -119,8 +116,8 @@ Describe "Copy-Worksheet" {
|
||||
|
||||
Context "Copy worksheet should support piped input" {
|
||||
BeforeAll {
|
||||
$xlfile = "$env:TEMP\reports.xlsx"
|
||||
$xlfileArchive = "$env:TEMP\reportsArchive.xlsx"
|
||||
$xlfile = "TestDrive:\reports.xlsx"
|
||||
$xlfileArchive = "TestDrive:\reportsArchive.xlsx"
|
||||
|
||||
Remove-Item $xlfile -ErrorAction SilentlyContinue
|
||||
Remove-Item $xlfileArchive -ErrorAction SilentlyContinue
|
||||
|
||||
@@ -1,14 +1,20 @@
|
||||
#Requires -Modules Pester
|
||||
|
||||
Import-Module $PSScriptRoot\..\ImportExcel.psd1 -Force
|
||||
if (-not $env:TEMP) {$env:TEMP = [IO.Path]::GetTempPath() -replace "/$","" }
|
||||
$notWindows = ($PSVersionTable.os -and $PSVersionTable.os -notMatch 'Windows' )
|
||||
#Import-Module $PSScriptRoot\..\ImportExcel.psd1 -Force
|
||||
|
||||
if (Get-process -Name Excel,xlim -ErrorAction SilentlyContinue) { Write-Warning -Message "You need to close Excel before running the tests." ; return}
|
||||
Describe ExportExcel {
|
||||
. "$PSScriptRoot\Samples\Samples.ps1"
|
||||
if (Get-process -Name Excel,xlim -ErrorAction SilentlyContinue) {
|
||||
It "Excel is open" {
|
||||
$Warning = "You need to close Excel before running the tests."
|
||||
Write-Warning -Message $Warning
|
||||
Set-ItResult -Inconclusive -Because $Warning
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
Context "#Example 1 # Creates and opens a file with the right number of rows and columns" {
|
||||
$path = Join-Path $Env:TEMP "test.xlsx"
|
||||
$path = "TestDrive:\test.xlsx"
|
||||
Remove-item -Path $path -ErrorAction SilentlyContinue
|
||||
#Test with a maximum of 100 processes for speed; export all properties, then export smaller subsets.
|
||||
$processes = Get-Process | where {$_.StartTime} | Select-Object -first 100 -Property * -excludeProperty Parent
|
||||
@@ -70,7 +76,7 @@ Describe ExportExcel {
|
||||
}
|
||||
|
||||
Context " # NoAliasOrScriptPropeties -ExcludeProperty and -DisplayPropertySet work" {
|
||||
$path = Join-Path $Env:TEMP "test.xlsx"
|
||||
$path = "TestDrive:\test.xlsx"
|
||||
Remove-item -Path $path -ErrorAction SilentlyContinue
|
||||
$processes = Get-Process | Select-Object -First 100
|
||||
$propertyNames = $Processes[0].psobject.properties.where( {$_.MemberType -eq 'Property'}).name
|
||||
@@ -119,7 +125,7 @@ Describe ExportExcel {
|
||||
|
||||
Context "#Example 2 # Exports a list of numbers and applies number format " {
|
||||
|
||||
$path = Join-Path $Env:TEMP "test.xlsx"
|
||||
$path = "TestDrive:\test.xlsx"
|
||||
Remove-item -Path $path -ErrorAction SilentlyContinue
|
||||
#testing -ReturnRange switch and applying number format to Formulas as well as values.
|
||||
$returnedRange = @($null, -1, 0, 34, 777, "", -0.5, 119, -0.1, 234, 788,"=A9+A10") | Export-Excel -NumberFormat '[Blue]$#,##0.00;[Red]-$#,##0.00' -Path $path -ReturnRange
|
||||
@@ -158,7 +164,7 @@ Describe ExportExcel {
|
||||
|
||||
Context " # Number format parameter" {
|
||||
BeforeAll {
|
||||
$path = Join-Path $Env:TEMP "test.xlsx"
|
||||
$path = "TestDrive:\test.xlsx"
|
||||
Remove-Item -Path $path -ErrorAction SilentlyContinue
|
||||
1..10 | Export-Excel -Path $path -Numberformat 'Number'
|
||||
1..10 | Export-Excel -Path $path -Numberformat 'Percentage' -Append
|
||||
@@ -181,7 +187,7 @@ Describe ExportExcel {
|
||||
|
||||
if ((Get-Culture).NumberFormat.CurrencySymbol -eq "£") {$OtherCurrencySymbol = "$"}
|
||||
else {$OtherCurrencySymbol = "£"}
|
||||
$path = Join-Path $Env:TEMP "test.xlsx"
|
||||
$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
|
||||
Remove-item -Path $path -ErrorAction SilentlyContinue
|
||||
@@ -298,7 +304,7 @@ Describe ExportExcel {
|
||||
|
||||
Context "# # Setting cells for different data types with -noHeader" {
|
||||
|
||||
$path = Join-Path $Env:TEMP "test.xlsx"
|
||||
$path = "TestDrive:\test.xlsx"
|
||||
Remove-item -Path $path -ErrorAction SilentlyContinue
|
||||
#Test -NoHeader & -NoNumberConversion
|
||||
[PSCustOmobject][Ordered]@{
|
||||
@@ -359,7 +365,7 @@ Describe ExportExcel {
|
||||
#Test New-ConditionalText builds correctly
|
||||
$ct = New-ConditionalText -ConditionalType GreaterThan 525 -ConditionalTextColor ([System.Drawing.Color]::DarkRed) -BackgroundColor ([System.Drawing.Color]::LightPink)
|
||||
|
||||
$path = Join-Path $Env:TEMP "test.xlsx"
|
||||
$path = "TestDrive:\test.xlsx"
|
||||
Remove-item -Path $path -ErrorAction SilentlyContinue
|
||||
#Test -ConditionalText with a single conditional spec.
|
||||
Write-Output 489 668 299 777 860 151 119 497 234 788 | Export-Excel -Path $path -ConditionalText $ct
|
||||
@@ -386,19 +392,19 @@ Describe ExportExcel {
|
||||
}
|
||||
}
|
||||
|
||||
Context "#Example 6 # Adding multiple conditional formats using short form syntax. " {
|
||||
if ($notwindows) {Write-warning "Test only runs on Windows" ; return}
|
||||
#Test adding mutliple conditional blocks and using the minimal syntax for new-ConditionalText
|
||||
$path = Join-Path $Env:TEMP "test.xlsx"
|
||||
Remove-item -Path $path -ErrorAction SilentlyContinue
|
||||
#Test adding mutliple conditional blocks and using the minimal syntax for new-ConditionalText
|
||||
$path = "TestDrive:\test.xlsx"
|
||||
Remove-item -Path $path -ErrorAction SilentlyContinue
|
||||
|
||||
#Testing -Passthrough
|
||||
$Excel = Get-Service | Select-Object Name, Status, DisplayName, ServiceName |
|
||||
Export-Excel $path -PassThru -ConditionalText $(
|
||||
New-ConditionalText Stop ([System.Drawing.Color]::DarkRed) ([System.Drawing.Color]::LightPink)
|
||||
New-ConditionalText Running ([System.Drawing.Color]::Blue) ([System.Drawing.Color]::Cyan)
|
||||
)
|
||||
$ws = $Excel.Workbook.Worksheets[1]
|
||||
#Testing -Passthrough
|
||||
$Excel = Get-Service | Select-Object Name, Status, DisplayName, ServiceName |
|
||||
Export-Excel $path -PassThru -ConditionalText $(
|
||||
New-ConditionalText Stop ([System.Drawing.Color]::DarkRed) ([System.Drawing.Color]::LightPink)
|
||||
New-ConditionalText Running ([System.Drawing.Color]::Blue) ([System.Drawing.Color]::Cyan)
|
||||
)
|
||||
$ws = $Excel.Workbook.Worksheets[1]
|
||||
|
||||
Context "#Example 6 # Adding multiple conditional formats using short form syntax. " {
|
||||
it "Added two blocks of conditional formating for the data range " {
|
||||
$ws.ConditionalFormatting.Count | Should be 2
|
||||
$ws.ConditionalFormatting[0].Address | Should be ($ws.Dimension.Address)
|
||||
@@ -411,8 +417,8 @@ Describe ExportExcel {
|
||||
$ws.ConditionalFormatting[1].Type | Should be "ContainsText"
|
||||
#Add RGB Comparison
|
||||
}
|
||||
Close-ExcelPackage -ExcelPackage $Excel
|
||||
}
|
||||
Close-ExcelPackage -ExcelPackage $Excel
|
||||
|
||||
Context "#Example 7 # Update-FirstObjectProperties works " {
|
||||
$Array = @()
|
||||
@@ -451,11 +457,9 @@ Describe ExportExcel {
|
||||
}
|
||||
|
||||
Context "#Examples 8 & 9 # Adding Pivot tables and charts from parameters" {
|
||||
$path = Join-Path $Env:TEMP "test.xlsx"
|
||||
$path = "TestDrive:\test.xlsx"
|
||||
#Test -passthru and -worksheetName creating a new, named, sheet in an existing file.
|
||||
$Script:Procs= Get-Process | Select-Object -first 20 -Property Name, cpu, pm, handles, company
|
||||
if ($Procs.count -lt 20) {Write-warning "Not enough proceses were returned by get-Process to run the test." ; return}
|
||||
$Excel = $Script:Procs| Export-Excel $path -WorkSheetname Processes -PassThru
|
||||
$Excel = Get-Process | Select-Object -first 20 -Property Name, cpu, pm, handles, company | Export-Excel $path -WorkSheetname Processes -PassThru
|
||||
#Testing -Excel Pacakage and adding a Pivot-table as a second step. Want to save and re-open it ...
|
||||
Export-Excel -ExcelPackage $Excel -WorkSheetname Processes -IncludePivotTable -PivotRows Company -PivotData PM -NoTotalsInPivot -PivotDataToColumn -Activate
|
||||
|
||||
@@ -471,8 +475,9 @@ Describe ExportExcel {
|
||||
$excel.Workbook.Worksheets["Processes"].Dimension.rows | Should be 21 #20 data + 1 header
|
||||
}
|
||||
it "Selected the Pivottable page " {
|
||||
Set-ItResult -Pending -Because "Bug in EPPLus 4.5"
|
||||
$PTws.View.TabSelected | Should be $true
|
||||
} -Skip # << Bug in EPPLus 4.5
|
||||
}
|
||||
$pt = $PTws.PivotTables[0]
|
||||
it "Built the expected Pivot table " {
|
||||
$pt.RowFields.Count | Should be 1
|
||||
@@ -512,7 +517,7 @@ Describe ExportExcel {
|
||||
}
|
||||
|
||||
Context " # Add-Worksheet inserted sheets, moved them correctly, and copied a sheet" {
|
||||
$path = Join-Path $Env:TEMP "test.xlsx"
|
||||
$path = "TestDrive:\test.xlsx"
|
||||
#Test the -CopySource and -Movexxxx parameters for Add-WorkSheet
|
||||
$Excel = Open-ExcelPackage $path
|
||||
#At this point Sheets Should be in the order Sheet1, Processes, ProcessesPivotTable
|
||||
@@ -534,7 +539,7 @@ Describe ExportExcel {
|
||||
$excel.Workbook.Worksheets[5].Name | Should be "Processes"
|
||||
$excel.Workbook.Worksheets[6].Name | Should be "NearDone"
|
||||
$excel.Workbook.Worksheets[7].Name | Should be "Sheet1"
|
||||
} -skip:($Procs.count -lt 20)
|
||||
}
|
||||
|
||||
it "Cloned 'Sheet1' to 'NewSheet' " {
|
||||
$newWs = $excel.Workbook.Worksheets["NewSheet"]
|
||||
@@ -547,15 +552,13 @@ Describe ExportExcel {
|
||||
}
|
||||
|
||||
Context " # Create and append with Start row and Start Column, inc ranges and Pivot table. " {
|
||||
$path = Join-Path $Env:TEMP "test.xlsx"
|
||||
$path = "TestDrive:\test.xlsx"
|
||||
remove-item -Path $path -ErrorAction SilentlyContinue
|
||||
#Catch warning
|
||||
$warnVar = $null
|
||||
#Test -Append with no existing sheet. Test adding a named pivot table from command line parameters and extending ranges when they're not specified explictly
|
||||
$Script:Procs= Get-Process
|
||||
if ($Procs.count -lt 20) {Write-warning "Not enough proceses were returned by get-Process to run the test." ; return}
|
||||
$Script:Procs| Select-Object -First 10 -Property Name, cpu, pm, handles, company | Export-Excel -StartRow 3 -StartColumn 3 -BoldTopRow -IncludePivotTable -PivotRows Company -PivotData PM -PivotTableName 'PTOffset' -Path $path -WorkSheetname withOffset -Append -PivotFilter Name -NoTotalsInPivot -RangeName procs -AutoFilter -AutoNameRange
|
||||
$Script:Procs| Select-Object -Last 10 -Property Name, cpu, pm, handles, company | Export-Excel -StartRow 3 -StartColumn 3 -BoldTopRow -IncludePivotTable -PivotRows Company -PivotData PM -PivotTableName 'PTOffset' -Path $path -WorkSheetname withOffset -Append -WarningAction SilentlyContinue -WarningVariable warnvar
|
||||
Get-Process | Select-Object -first 10 -Property Name, cpu, pm, handles, company | Export-Excel -StartRow 3 -StartColumn 3 -BoldTopRow -IncludePivotTable -PivotRows Company -PivotData PM -PivotTableName 'PTOffset' -Path $path -WorkSheetname withOffset -Append -PivotFilter Name -NoTotalsInPivot -RangeName procs -AutoFilter -AutoNameRange
|
||||
Get-Process | Select-Object -last 10 -Property Name, cpu, pm, handles, company | Export-Excel -StartRow 3 -StartColumn 3 -BoldTopRow -IncludePivotTable -PivotRows Company -PivotData PM -PivotTableName 'PTOffset' -Path $path -WorkSheetname withOffset -Append -WarningAction SilentlyContinue -WarningVariable warnvar
|
||||
$Excel = Open-ExcelPackage $path
|
||||
$dataWs = $Excel.Workbook.Worksheets["withOffset"]
|
||||
$pt = $Excel.Workbook.Worksheets["PTOffset"].PivotTables[0]
|
||||
@@ -599,14 +602,11 @@ Describe ExportExcel {
|
||||
}
|
||||
|
||||
Context " # Create and append explicit and auto table and range extension" {
|
||||
$path = Join-Path $Env:TEMP "test.xlsx"
|
||||
$path = "TestDrive:\test.xlsx"
|
||||
#Test -Append automatically extends a table, even when it is not specified in the append command;
|
||||
$Script:Procs= Get-process
|
||||
if ($Procs.count -lt 20) {Write-warning "Not enough proceses were returned by get-Process to run the test." ; return}
|
||||
|
||||
$Script:Procs| Select-Object -first 10 -Property Name, cpu, pm, handles, company | Export-Excel -Path $path -TableName ProcTab -AutoNameRange -WorkSheetname NoOffset -ClearSheet
|
||||
Get-Process | Select-Object -first 10 -Property Name, cpu, pm, handles, company | Export-Excel -Path $path -TableName ProcTab -AutoNameRange -WorkSheetname NoOffset -ClearSheet
|
||||
#Test number format applying to new data
|
||||
$Script:Procs| Select-Object -last 10 -Property Name, cpu, pm, handles, company | Export-Excel -Path $path -AutoNameRange -WorkSheetname NoOffset -Append -Numberformat 'Number'
|
||||
Get-Process | Select-Object -last 10 -Property Name, cpu, pm, handles, company | Export-Excel -Path $path -AutoNameRange -WorkSheetname NoOffset -Append -Numberformat 'Number'
|
||||
$Excel = Open-ExcelPackage $path
|
||||
$dataWs = $Excel.Workbook.Worksheets["NoOffset"]
|
||||
|
||||
@@ -635,8 +635,7 @@ Describe ExportExcel {
|
||||
}
|
||||
|
||||
Context "#Example 11 # Create and append with title, inc ranges and Pivot table" {
|
||||
if ($Procs.count -lt 20) {Write-warning "Not enough proceses were returned by get-Process to run the test." ; return}
|
||||
$path = Join-Path $Env:TEMP "test.xlsx"
|
||||
$path = "TestDrive:\test.xlsx"
|
||||
#Test New-PivotTableDefinition builds definition using -Pivotfilter and -PivotTotals options.
|
||||
$ptDef = [ordered]@{}
|
||||
$ptDef += New-PivotTableDefinition -PivotTableName "PT1" -SourceWorkSheet 'Sheet1' -PivotRows "Status" -PivotData @{'Status' = 'Count'} -PivotTotals Columns -PivotFilter "StartType" -IncludePivotChart -ChartType BarClustered3D -ChartTitle "Services by status" -ChartHeight 512 -ChartWidth 768 -ChartRow 10 -ChartColumn 0 -NoLegend -PivotColumns CanPauseAndContinue
|
||||
@@ -718,8 +717,8 @@ Describe ExportExcel {
|
||||
}
|
||||
|
||||
Context "#Example 13 # Formatting and another way to do a pivot. " {
|
||||
$path = Join-Path $Env:TEMP "test.xlsx"
|
||||
Remove-Item $path -ErrorAction SilentlyContinue
|
||||
$path = "TestDrive:\test.xlsx"
|
||||
Remove-Item $path
|
||||
#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
|
||||
$sheet = $excel.Workbook.Worksheets["Processes"]
|
||||
@@ -747,6 +746,8 @@ Describe ExportExcel {
|
||||
}
|
||||
it "Applied the formating " {
|
||||
$sheet | Should not beNullOrEmpty
|
||||
$sheet.Column(1).wdith | Should not be $sheet.DefaultColWidth
|
||||
$sheet.Column(7).wdith | Should not be $sheet.DefaultColWidth
|
||||
$sheet.Column(1).style.font.bold | Should be $true
|
||||
$sheet.Column(2).style.wraptext | Should be $true
|
||||
$sheet.Column(2).width | Should be 29
|
||||
@@ -769,10 +770,6 @@ Describe ExportExcel {
|
||||
$sheet.ConditionalFormatting[2].Formula | Should be '104857600'
|
||||
$sheet.ConditionalFormatting[2].Style.Font.Color.Color.Name | Should be 'ffff0000'
|
||||
}
|
||||
it "Applied autowidth " {
|
||||
$sheet.Column(1).wdith | Should not be $sheet.DefaultColWidth
|
||||
$sheet.Column(7).wdith | Should not be $sheet.DefaultColWidth
|
||||
} -skip:$notwindows
|
||||
it "Created the named ranges " {
|
||||
$sheet.Names.Count | Should be 7
|
||||
$sheet.Names[0].Start.Column | Should be 1
|
||||
@@ -800,7 +797,7 @@ Describe ExportExcel {
|
||||
}
|
||||
|
||||
Context " # Chart from MultiSeries.ps1 in the Examples\charts Directory" {
|
||||
$path = Join-Path $Env:TEMP "test.xlsx"
|
||||
$path = "TestDrive:\test.xlsx"
|
||||
Remove-Item -Path $path -ErrorAction SilentlyContinue
|
||||
#Test we haven't missed any parameters on New-ChartDefinition which are on add chart or vice versa.
|
||||
|
||||
@@ -823,7 +820,7 @@ Describe ExportExcel {
|
||||
$data[1].Handles | Should not beNullOrEmpty
|
||||
$data[1].PM | Should not beNullOrEmpty
|
||||
$data[1].VirtualMemorySize | Should not beNullOrEmpty
|
||||
} -skip:($procs.count -lt 20)
|
||||
}
|
||||
$c = New-ExcelChartDefinition -Title Stats -ChartType LineMarkersStacked -XRange "Processes[Name]" -YRange "Processes[PM]", "Processes[VirtualMemorySize]" -SeriesHeader 'PM', 'VMSize'
|
||||
|
||||
it "Created the Excel chart definition " {
|
||||
@@ -858,7 +855,7 @@ Describe ExportExcel {
|
||||
}
|
||||
|
||||
Context " # variation of plot.ps1 from Examples Directory using Add chart outside ExportExcel" {
|
||||
$path = Join-Path $Env:TEMP "test.xlsx"
|
||||
$path = "TestDrive:\test.xlsx"
|
||||
#Test inserting a fomual
|
||||
$excel = 0..360 | ForEach-Object {[pscustomobject][ordered]@{x = $_; Sinx = "=Sin(Radians(x)) "}} | Export-Excel -AutoNameRange -Path $path -WorkSheetname SinX -ClearSheet -FreezeFirstColumn -PassThru
|
||||
#Test-Add Excel Chart to existing data. Test add Conditional formatting with a formula
|
||||
@@ -900,7 +897,7 @@ Describe ExportExcel {
|
||||
}
|
||||
|
||||
Context " # Quick line chart" {
|
||||
$path = Join-Path $Env:TEMP "test.xlsx"
|
||||
$path = "TestDrive:\test.xlsx"
|
||||
Remove-Item -Path $path -ErrorAction SilentlyContinue
|
||||
#test drawing a chart when data doesn't have a string
|
||||
0..360 | ForEach-Object {[pscustomobject][ordered]@{x = $_; Sinx = "=Sin(Radians(x)) "}} | Export-Excel -AutoNameRange -Path $path -LineChart
|
||||
@@ -918,10 +915,8 @@ Describe ExportExcel {
|
||||
}
|
||||
|
||||
Context " # Quick Pie chart and three icon conditional formating" {
|
||||
$path = Join-Path $Env:TEMP "Pie.xlsx"
|
||||
$path = "TestDrive:\Pie.xlsx"
|
||||
Remove-Item -Path $path -ErrorAction SilentlyContinue
|
||||
$Script:Procs= Get-Process
|
||||
if ($Procs.count -lt 20) {Write-warning "Not enough proceses were returned by get-Process to run the test." ; return}
|
||||
$range = Get-Process| Group-Object -Property company | Where-Object -Property name |
|
||||
Select-Object -Property Name, @{n="TotalPm";e={($_.group | Measure-Object -sum -Property pm).sum }} |
|
||||
Export-Excel -NoHeader -AutoNameRange -path $path -ReturnRange -PieChart -ShowPercent
|
||||
@@ -957,11 +952,16 @@ Describe ExportExcel {
|
||||
}
|
||||
|
||||
Context " # Awkward multiple tables" {
|
||||
if ($notWindows) {Write-warning "Test only runs on Windows" ; return}
|
||||
$path = Join-Path $Env:TEMP "test.xlsx"
|
||||
$path = "TestDrive:\test.xlsx"
|
||||
#Test creating 3 on overlapping tables on the same page. Create rightmost the left most then middle.
|
||||
remove-item -Path $path -ErrorAction SilentlyContinue
|
||||
$r = Get-ChildItem -path C:\WINDOWS\system32 -File
|
||||
if ($IsLinux -or $IsMacOS) {
|
||||
$SystemFolder = '/etc'
|
||||
}
|
||||
else {
|
||||
$SystemFolder = 'C:\WINDOWS\system32'
|
||||
}
|
||||
$r = Get-ChildItem -path $SystemFolder -File
|
||||
|
||||
"Biggest files" | Export-Excel -Path $path -StartRow 1 -StartColumn 7
|
||||
$r | Sort-Object length -Descending | Select-Object -First 14 Name, @{n="Size";e={$_.Length}} |
|
||||
@@ -993,7 +993,7 @@ Describe ExportExcel {
|
||||
}
|
||||
|
||||
Context " # Parameters and ParameterSets" {
|
||||
$Path = join-path $env:TEMP "temp.xlsx"
|
||||
$Path = Join-Path (Resolve-Path 'TestDrive:').ProviderPath "test.xlsx"
|
||||
Remove-Item -Path $Path -ErrorAction SilentlyContinue
|
||||
$Processes = Get-Process | Select-Object -first 10 -Property Name, cpu, pm, handles, company
|
||||
|
||||
@@ -1028,26 +1028,24 @@ Describe ExportExcel {
|
||||
$ExcelPackage.File | Should Be $Path
|
||||
$Worksheet.Tables[0].Name | Should Be 'Table1'
|
||||
}
|
||||
it "Now will use temp Path, set TableName with generated name".PadRight(87) {
|
||||
it "Now will use temp Path, set TableName with generated name and AutoSize".PadRight(87) {
|
||||
$ExcelPackage = $Processes | Export-Excel -Now -PassThru
|
||||
$Script:Worksheet = $ExcelPackage.Workbook.Worksheets[1]
|
||||
$Worksheet = $ExcelPackage.Workbook.Worksheets[1]
|
||||
|
||||
$ExcelPackage.File | Should BeLike ([IO.Path]::GetTempPath() + '*')
|
||||
$Script:Worksheet.Tables[0].Name | Should Be 'Table1'
|
||||
$Script:Worksheet.AutoFilterAddress | Should BeNullOrEmpty}
|
||||
it "Applies AutoSize with these".PadRight(87) {
|
||||
$Script:Worksheet.Column(5).Width | Should BeGreaterThan 9.5
|
||||
} -skip:$notwindows
|
||||
$Worksheet.Tables[0].Name | Should Be 'Table1'
|
||||
$Worksheet.AutoFilterAddress | Should BeNullOrEmpty
|
||||
$Worksheet.Column(5).Width | Should BeGreaterThan 9.5
|
||||
}
|
||||
it "Now allows override of Path and TableName".PadRight(87) {
|
||||
$ExcelPackage = $Processes | Export-Excel -Now -PassThru -Path $Path -TableName:$false
|
||||
$Script:Worksheet = $ExcelPackage.Workbook.Worksheets[1]
|
||||
$Worksheet = $ExcelPackage.Workbook.Worksheets[1]
|
||||
|
||||
$ExcelPackage.File | Should Be $Path
|
||||
$Script:Worksheet.Tables | Should BeNullOrEmpty
|
||||
$Script:Worksheet.AutoFilterAddress | Should BeNullOrEmpty
|
||||
$Worksheet.Tables | Should BeNullOrEmpty
|
||||
$Worksheet.AutoFilterAddress | Should BeNullOrEmpty
|
||||
$Worksheet.Column(5).Width | Should BeGreaterThan 9.5
|
||||
}
|
||||
it "Allows AutoSize with the override".PadRight(87) {
|
||||
$Script:Worksheet.Column(5).Width | Should BeGreaterThan 9.5
|
||||
} -skip:$notwindows
|
||||
<# Mock looks unreliable need to check
|
||||
Mock -CommandName 'Invoke-Item'
|
||||
it "Now will Show".PadRight(87) {
|
||||
@@ -1069,14 +1067,11 @@ Describe ExportExcel {
|
||||
}
|
||||
it "Now allows to set TableName".PadRight(87) {
|
||||
$ExcelPackage = $Processes | Export-Excel -Now -PassThru -TableName 'Data'
|
||||
$Script:Worksheet = $ExcelPackage.Workbook.Worksheets[1]
|
||||
$Worksheet = $ExcelPackage.Workbook.Worksheets[1]
|
||||
|
||||
$Script:Worksheet.Tables[0].Name | Should Be 'Data'
|
||||
$Script:Worksheet.AutoFilterAddress | Should BeNullOrEmpty
|
||||
$Worksheet.Tables[0].Name | Should Be 'Data'
|
||||
$Worksheet.AutoFilterAddress | Should BeNullOrEmpty
|
||||
$Worksheet.Column(5).Width | Should BeGreaterThan 9.5
|
||||
}
|
||||
it "Allows to set TableName with AutoSize".PadRight(87) {
|
||||
$Script:Worksheet.Column(5).Width | Should BeGreaterThan 9.5
|
||||
} -skip:$notwindows
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
if (-not $env:TEMP) {$env:TEMP = [IO.Path]::GetTempPath() -replace "/$","" }
|
||||
|
||||
|
||||
$path = Join-Path $Env:TEMP "test.xlsx"
|
||||
remove-item -path $path -ErrorAction SilentlyContinue
|
||||
ConvertFrom-Csv @"
|
||||
Describe "Creating workbook with a single line" {
|
||||
$path = "TestDrive:\test.xlsx"
|
||||
remove-item -path $path -ErrorAction SilentlyContinue
|
||||
ConvertFrom-Csv @"
|
||||
Product, City, Gross, Net
|
||||
Apple, London , 300, 250
|
||||
Orange, London , 400, 350
|
||||
@@ -17,10 +17,9 @@ Apple, New York, 1200,700
|
||||
|
||||
PivotChartDefinition=@{Title="Gross and net by city and product"; ChartType="ColumnClustered"; Column=6; Width=600; Height=360; YMajorUnit=500; YMinorUnit=100; YAxisNumberformat="$#,##0"; LegendPosition="Bottom"}}}
|
||||
|
||||
$excel = Open-ExcelPackage $path
|
||||
$ws1 = $excel.Workbook.Worksheets[1]
|
||||
$ws2 = $excel.Workbook.Worksheets[2]
|
||||
Describe "Creating workbook with a single line" {
|
||||
$excel = Open-ExcelPackage $path
|
||||
$ws1 = $excel.Workbook.Worksheets[1]
|
||||
$ws2 = $excel.Workbook.Worksheets[2]
|
||||
Context "Data Page" {
|
||||
It "Inserted the data and created the table " {
|
||||
$ws1.Tables[0] | Should not beNullOrEmpty
|
||||
@@ -52,8 +51,9 @@ Describe "Creating workbook with a single line" {
|
||||
$ws2.PivotTables[0].ColumGrandTotals | Should be $true #Epplus's mis-spelling of column not mine
|
||||
}
|
||||
it "Made the PivotTable page active " {
|
||||
Set-ItResult -Pending -Because "Bug in EPPLus 4.5"
|
||||
$ws2.View.TabSelected | Should be $true
|
||||
} -Skip # << Bug in EPPLus 4.5
|
||||
}
|
||||
it "Created the Pivot Chart " {
|
||||
$ws2.Drawings[0] | Should not beNullOrEmpty
|
||||
$ws2.Drawings[0].ChartType.ToString() | Should be ColumnClustered
|
||||
|
||||
@@ -1,11 +1,9 @@
|
||||
if (-not $env:TEMP) {$env:TEMP = [IO.Path]::GetTempPath() -replace "/$","" }
|
||||
|
||||
$scriptPath = Split-Path -Path $MyInvocation.MyCommand.path -Parent
|
||||
$scriptPath = Split-Path -Path $MyInvocation.MyCommand.path -Parent
|
||||
$dataPath = Join-Path -Path $scriptPath -ChildPath "First10Races.csv"
|
||||
|
||||
Describe "Creating small named ranges with hyperlinks" {
|
||||
BeforeAll {
|
||||
$path = Join-Path $Env:TEMP "results.xlsx"
|
||||
$path = "TestDrive:\Results.xlsx"
|
||||
Remove-Item -Path $path -ErrorAction SilentlyContinue
|
||||
#Read race results, and group by race name : export 1 row to get headers, leaving enough rows aboce to put in a link for each race
|
||||
$results = Import-Csv -Path $dataPath |
|
||||
@@ -94,11 +92,12 @@ Describe "Creating small named ranges with hyperlinks" {
|
||||
$sheet.ConditionalFormatting[1].StopIfTrue | Should be $true
|
||||
}
|
||||
It "Applied ConditionalFormatting, including Reverse " {
|
||||
Set-ItResult -Pending -Because "Bug in EPPLus 4.5"
|
||||
$sheet.ConditionalFormatting[3].LowValue.Color.R | Should begreaterThan 180
|
||||
$sheet.ConditionalFormatting[3].LowValue.Color.G | Should beLessThan 128
|
||||
$sheet.ConditionalFormatting[3].HighValue.Color.R | Should beLessThan 128
|
||||
$sheet.ConditionalFormatting[3].HighValue.Color.G | Should begreaterThan 180
|
||||
} -Skip # << Bug in EPPLus 4.5
|
||||
}
|
||||
}
|
||||
Context "Adding a table" {
|
||||
it "Created a table " {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#Requires -Modules Pester
|
||||
remove-module importExcel -erroraction silentlyContinue
|
||||
Import-Module $PSScriptRoot\..\ImportExcel.psd1 -Force
|
||||
#remove-module importExcel -erroraction silentlyContinue
|
||||
#Import-Module $PSScriptRoot\..\ImportExcel.psd1 -Force
|
||||
|
||||
|
||||
Describe "Check if Function aliases exist" {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
Import-Module $PSScriptRoot\..\..\ImportExcel.psd1
|
||||
#Import-Module $PSScriptRoot\..\..\ImportExcel.psd1
|
||||
|
||||
Describe "Tests" {
|
||||
BeforeAll {
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
if (-not $env:TEMP) {$env:TEMP = [IO.Path]::GetTempPath() -replace "/$","" }
|
||||
|
||||
Describe "Exporting with -Inputobject" {
|
||||
BeforeAll {
|
||||
$path = Join-Path $Env:TEMP "results.xlsx"
|
||||
$path = "TestDrive:\Results.xlsx"
|
||||
Remove-Item -Path $path -ErrorAction SilentlyContinue
|
||||
#Read race results, and group by race name : export 1 row to get headers, leaving enough rows aboce to put in a link for each race
|
||||
$results = ((Get-Process) + (Get-Process -id $PID)) | Select-Object -last 10 -Property Name, cpu, pm, handles, StartTime
|
||||
|
||||
26
__tests__/InstallPowerShell.ps1
Normal file
26
__tests__/InstallPowerShell.ps1
Normal file
@@ -0,0 +1,26 @@
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Installs PowerShell Core on Windows.
|
||||
#>
|
||||
[CmdLetBinding()]
|
||||
Param
|
||||
(
|
||||
# Version to install in the format from the .msi, for example "7.0.0-preview.1"
|
||||
[Parameter(Mandatory)]
|
||||
[String]$Version
|
||||
)
|
||||
$ErrorActionPreference = 'Stop'
|
||||
|
||||
'[Progress] Downloading PowerShell Core.'
|
||||
$MsiPath = Join-Path $env:TEMP "PowerShell-$Version-win-x64.msi"
|
||||
[System.Net.WebClient]::new().DownloadFile("https://github.com/PowerShell/PowerShell/releases/download/v$Version/PowerShell-$Version-win-x64.msi", $MsiPath)
|
||||
|
||||
'[Progress] Installing PowerShell Core.'
|
||||
Start-Process 'msiexec.exe' -Wait -ArgumentList "/i $MsiPath /quiet"
|
||||
Remove-Item -Path $MsiPath
|
||||
$PowerShellFolder = $Version[0]
|
||||
if ($Version -like "*preview*") {
|
||||
$PowerShellFolder += '-preview'
|
||||
}
|
||||
$env:Path = "$env:ProgramFiles\PowerShell\$PowerShellFolder;$env:Path"
|
||||
'[Progress] PowerShell Core Installed.'
|
||||
@@ -1,7 +1,4 @@
|
||||
if (-not $env:TEMP) {$env:TEMP = [IO.Path]::GetTempPath() -replace "/$","" }
|
||||
$notWindows = ($PSVersionTable.os -and $PSVersionTable.os -notMatch 'Windows' )
|
||||
|
||||
$data1 = ConvertFrom-Csv -InputObject @"
|
||||
$data1 = ConvertFrom-Csv -InputObject @"
|
||||
ID,Product,Quantity,Price,Total
|
||||
12001,Nails,37,3.99,147.63
|
||||
12002,Hammer,5,12.10,60.5
|
||||
@@ -27,7 +24,8 @@ ID,Product,Quantity,Price,Total
|
||||
|
||||
Describe "Join Worksheet part 1" {
|
||||
BeforeAll {
|
||||
$path = Join-Path $Env:TEMP "test.xlsx"
|
||||
. "$PSScriptRoot\Samples\Samples.ps1"
|
||||
$path = "TestDrive:\test.xlsx"
|
||||
Remove-Item -Path $path -ErrorAction SilentlyContinue
|
||||
$data1 | Export-Excel -Path $path -WorkSheetname Oxford
|
||||
$data2 | Export-Excel -Path $path -WorkSheetname Abingdon
|
||||
@@ -53,9 +51,10 @@ Describe "Join Worksheet part 1" {
|
||||
$excel.Workbook.Worksheets["SummaryPivot"].Hidden | Should be 'Visible'
|
||||
}
|
||||
it "Activated the correct worksheet " {
|
||||
Set-ItResult -Pending -Because "Bug in EPPLus 4.5"
|
||||
$excel.Workbook.worksheets["SummaryPivot"].View.TabSelected | Should be $true
|
||||
$excel.Workbook.worksheets["Total"].View.TabSelected | Should be $false
|
||||
} -Skip # << Bug in EPPLus 4.5
|
||||
}
|
||||
|
||||
}
|
||||
Context "Merging 3 blocks" {
|
||||
@@ -92,11 +91,10 @@ Describe "Join Worksheet part 1" {
|
||||
}
|
||||
}
|
||||
}
|
||||
$path = Join-Path $Env:TEMP "Test.xlsx"
|
||||
$path = "TestDrive:\Test.xlsx"
|
||||
Remove-item -Path $path -ErrorAction SilentlyContinue
|
||||
#switched to CIM objects so test runs on V6
|
||||
Describe "Join Worksheet part 2" {
|
||||
if ($notWindows) {Write-warning -message "Test only runs on Windows" ; return}
|
||||
Get-CimInstance -ClassName win32_logicaldisk |
|
||||
Select-Object -Property DeviceId,VolumeName, Size,Freespace |
|
||||
Export-Excel -Path $path -WorkSheetname Volumes -NumberFormat "0,000"
|
||||
|
||||
@@ -2,13 +2,15 @@
|
||||
|
||||
Describe "Password Support" {
|
||||
if ($PSVersionTable.PSVersion.Major -GT 5) {
|
||||
Write-Warning "Can't test passwords on V6 and later"
|
||||
It "Password Supported" {
|
||||
Set-ItResult -Pending -Because "Can't test passwords on V6 and later"
|
||||
}
|
||||
return
|
||||
}
|
||||
Context "Password protected sheet" {
|
||||
BeforeAll {
|
||||
$password = "YouMustRememberThis"
|
||||
$path = "$env:TEMP\Test.xlsx"
|
||||
$path = "TestDrive:\Test.xlsx"
|
||||
Remove-Item $path -ErrorAction SilentlyContinue
|
||||
Get-Service | Select-Object -First 10 | Export-excel -password $password -Path $Path -DisplayPropertySet
|
||||
}
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
if (-not $env:TEMP) {$env:TEMP = [IO.Path]::GetTempPath() -replace "/$","" }
|
||||
|
||||
$path = Join-Path $Env:TEMP "test.xlsx"
|
||||
Remove-Item -path $path -ErrorAction SilentlyContinue
|
||||
$excel = ConvertFrom-Csv @"
|
||||
Describe "Setting worksheet protection " {
|
||||
BeforeAll {
|
||||
$path = "TestDrive:\test.xlsx"
|
||||
Remove-Item -path $path -ErrorAction SilentlyContinue
|
||||
$excel = ConvertFrom-Csv @"
|
||||
Product, City, Gross, Net
|
||||
Apple, London , 300, 250
|
||||
Orange, London , 400, 350
|
||||
@@ -13,14 +13,11 @@ Apple, New York, 1200,700
|
||||
|
||||
"@ | Export-Excel -Path $path -WorksheetName Sheet1 -PassThru
|
||||
|
||||
$ws = $excel.sheet1
|
||||
$ws = $excel.sheet1
|
||||
|
||||
Set-WorkSheetProtection -WorkSheet $ws -IsProtected -BlockEditObject -AllowFormatRows -UnLockAddress "1:1"
|
||||
Set-WorkSheetProtection -WorkSheet $ws -IsProtected -BlockEditObject -AllowFormatRows -UnLockAddress "1:1"
|
||||
|
||||
Close-ExcelPackage -ExcelPackage $excel
|
||||
|
||||
Describe "Setting worksheet protection " {
|
||||
BeforeAll {
|
||||
Close-ExcelPackage -ExcelPackage $excel
|
||||
$excel = Open-ExcelPackage -Path $path
|
||||
$ws = $ws = $excel.sheet1
|
||||
}
|
||||
|
||||
105
__tests__/Publish.ps1
Normal file
105
__tests__/Publish.ps1
Normal file
@@ -0,0 +1,105 @@
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Deploy module to PowerShellGallery.
|
||||
#>
|
||||
[CmdletBinding(DefaultParameterSetName = 'ModuleName')]
|
||||
Param
|
||||
(
|
||||
# The name of the installed module to be deployed, if not provided the name of the .psm1 file in the parent folder is used.
|
||||
[Parameter(ParameterSetName = 'ModuleName')]
|
||||
[ValidateNotNullOrEmpty()]
|
||||
[String]$ModuleName,
|
||||
|
||||
# Publish module from path (module folder), if not provided -ModuleName is used.
|
||||
[Parameter(Mandatory, ParameterSetName = 'Path')]
|
||||
[ValidateNotNullOrEmpty()]
|
||||
[String]$Path,
|
||||
|
||||
# Key for PowerShellGallery deployment, if not provided $env:NugetApiKey is used.
|
||||
[ValidateNotNullOrEmpty()]
|
||||
[String]$NugetApiKey,
|
||||
|
||||
# Skip Version verification for PowerShellGallery deployment, can be used for first release.
|
||||
[Switch]$Force
|
||||
)
|
||||
$ErrorActionPreference = 'Stop'
|
||||
|
||||
if ($Path) {
|
||||
$Path = Resolve-Path -Path $Path
|
||||
if ($Path.Count -ne 1) {
|
||||
throw ('Invalid Path, $Path.Count: {0}.' -f $Path.Count)
|
||||
}
|
||||
$Psd1Path = (Get-ChildItem -File -Filter *.psd1 -Path $Path -Recurse)[0].FullName
|
||||
$ModuleName = [System.IO.Path]::GetFileNameWithoutExtension($Psd1Path)
|
||||
$VersionLocal = (. ([Scriptblock]::Create((Get-Content -Path $Psd1Path | Out-String)))).ModuleVersion
|
||||
}
|
||||
else {
|
||||
# Get Script Root
|
||||
if ($PSScriptRoot) {
|
||||
$ScriptRoot = $PSScriptRoot
|
||||
}
|
||||
elseif ($psISE.CurrentFile.IsUntitled -eq $false) {
|
||||
$ScriptRoot = Split-Path -Path $psISE.CurrentFile.FullPath
|
||||
}
|
||||
elseif ($null -ne $psEditor.GetEditorContext().CurrentFile.Path -and $psEditor.GetEditorContext().CurrentFile.Path -notlike 'untitled:*') {
|
||||
$ScriptRoot = Split-Path -Path $psEditor.GetEditorContext().CurrentFile.Path
|
||||
}
|
||||
else {
|
||||
$ScriptRoot = '.'
|
||||
}
|
||||
|
||||
# Get Module Info
|
||||
if (!$ModuleName) {
|
||||
$ModuleName = [System.IO.Path]::GetFileNameWithoutExtension((Get-ChildItem -File -Filter *.psm1 -Name -Path (Split-Path $ScriptRoot)))
|
||||
}
|
||||
$VersionLocal = ((Get-Module -Name $ModuleName -ListAvailable).Version | Measure-Object -Maximum).Maximum
|
||||
}
|
||||
|
||||
"[Progress] Deploy Script Start for Module: $ModuleName, Version: $VersionLocal."
|
||||
|
||||
# Deploy to PowerShell Gallery if run locally OR from AppVeyor & GitHub master
|
||||
if (!$env:APPVEYOR -or $env:APPVEYOR_REPO_BRANCH -eq 'master') {
|
||||
if ($env:APPVEYOR) {
|
||||
$Success = $true
|
||||
$AppVeyorProject = Invoke-RestMethod -Uri "https://ci.appveyor.com/api/projects/$env:APPVEYOR_ACCOUNT_NAME/$env:APPVEYOR_PROJECT_SLUG"
|
||||
$AppVeyorProject.build.jobs | ForEach-Object {
|
||||
'[Info] AppVeyor job name: "{0}", Id: {1}, Status: {2}.' -f $_.name, $_.jobId, $_.status
|
||||
if ($_.jobId -ne $env:APPVEYOR_JOB_ID -and $_.status -ne "success") {
|
||||
$Success = $false
|
||||
}
|
||||
}
|
||||
if (!$Success) {
|
||||
'[Info] There are filed jobs skipping PowerShell Gallery deploy.'
|
||||
break
|
||||
}
|
||||
}
|
||||
try {
|
||||
$VersionGallery = (Find-Module -Name $ModuleName -ErrorAction Stop).Version
|
||||
}
|
||||
catch {
|
||||
if ($_.Exception.Message -notlike 'No match was found for the specified search criteria*' -or !$Force) {
|
||||
throw $_
|
||||
}
|
||||
}
|
||||
|
||||
"[Info] PowerShellGallery. $ModuleName, VersionGallery: $VersionGallery, VersionLocal: $VersionLocal."
|
||||
if ($VersionGallery -lt $VersionLocal -or $Force) {
|
||||
if (!$NugetApiKey) {
|
||||
$NugetApiKey = $env:NugetApiKey
|
||||
}
|
||||
"[Info] PowerShellGallery. Deploying $ModuleName version $VersionLocal."
|
||||
if ($Path) {
|
||||
Publish-Module -NuGetApiKey $NugetApiKey -Path $Path
|
||||
}
|
||||
else {
|
||||
Publish-Module -NuGetApiKey $NugetApiKey -Name $ModuleName -RequiredVersion $VersionLocal
|
||||
}
|
||||
}
|
||||
else {
|
||||
'[Info] PowerShellGallery Deploy Skipped (Version Check).'
|
||||
}
|
||||
}
|
||||
else {
|
||||
'[Info] PowerShellGallery Deploy Skipped.'
|
||||
}
|
||||
'[Progress] Deploy Ended.'
|
||||
@@ -1,10 +1,5 @@
|
||||
|
||||
if (-not $env:TEMP) {$env:TEMP = [IO.Path]::GetTempPath() -replace "/$","" }
|
||||
$notWindows = ($PSVersionTable.os -and $PSVersionTable.os -notMatch 'Windows' )
|
||||
|
||||
$path = Join-Path $Env:TEMP "test.xlsx"
|
||||
$path = "TestDrive:\test.xlsx"
|
||||
describe "Consistent passing of ranges." {
|
||||
if ($notWindows) {Write-warning -message "Test uses get-service so only works on Windows" ; return}
|
||||
Context "Conditional Formatting" {
|
||||
Remove-Item -path $path -ErrorAction SilentlyContinue
|
||||
$excel = Get-Service | Export-Excel -Path $path -WorksheetName Services -PassThru -AutoSize -DisplayPropertySet -AutoNameRange -Title "Services on $Env:COMPUTERNAME"
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
#Requires -Modules Pester
|
||||
Import-Module $PSScriptRoot\..\ImportExcel.psd1 -Force
|
||||
if (-not $env:TEMP) {$env:TEMP = [IO.Path]::GetTempPath() -replace "/$","" }
|
||||
#Import-Module $PSScriptRoot\..\ImportExcel.psd1 -Force
|
||||
|
||||
Describe "Remove Worksheet" {
|
||||
Context "Remove a worksheet output" {
|
||||
@@ -11,7 +10,7 @@ Name,Age
|
||||
Jane,10
|
||||
John,20
|
||||
"@
|
||||
$xlFile1 = Join-Path $Env:TEMP "removeWorsheet1.xlsx"
|
||||
$xlFile1 = "TestDrive:\RemoveWorsheet1.xlsx"
|
||||
Remove-Item $xlFile1 -ErrorAction SilentlyContinue
|
||||
|
||||
$data | Export-Excel -Path $xlFile1 -WorksheetName Target1
|
||||
@@ -19,7 +18,7 @@ John,20
|
||||
$data | Export-Excel -Path $xlFile1 -WorksheetName Target3
|
||||
$data | Export-Excel -Path $xlFile1 -WorksheetName Sheet1
|
||||
|
||||
$xlFile2 = Join-Path $Env:TEMP "removeWorsheet2.xlsx"
|
||||
$xlFile2 = "TestDrive:\RemoveWorsheet2.xlsx"
|
||||
Remove-Item $xlFile2 -ErrorAction SilentlyContinue
|
||||
|
||||
$data | Export-Excel -Path $xlFile2 -WorksheetName Target1
|
||||
@@ -66,7 +65,7 @@ John,20
|
||||
|
||||
it "Should delete sheet from multiple workbooks".PadRight(87) {
|
||||
|
||||
Get-ChildItem (Join-Path $Env:TEMP "removeWorsheet*.xlsx") | Remove-WorkSheet
|
||||
Get-ChildItem "TestDrive:\RemoveWorsheet*.xlsx" | Remove-WorkSheet
|
||||
|
||||
$actual = Get-ExcelSheetInfo -Path $xlFile1
|
||||
|
||||
|
||||
BIN
__tests__/Samples/Get-CimInstanceDisk.xml
Normal file
BIN
__tests__/Samples/Get-CimInstanceDisk.xml
Normal file
Binary file not shown.
BIN
__tests__/Samples/Get-CimInstanceNetAdapter.xml
Normal file
BIN
__tests__/Samples/Get-CimInstanceNetAdapter.xml
Normal file
Binary file not shown.
BIN
__tests__/Samples/Get-Process.xml
Normal file
BIN
__tests__/Samples/Get-Process.xml
Normal file
Binary file not shown.
BIN
__tests__/Samples/Get-Service.xml
Normal file
BIN
__tests__/Samples/Get-Service.xml
Normal file
Binary file not shown.
53
__tests__/Samples/Samples.ps1
Normal file
53
__tests__/Samples/Samples.ps1
Normal file
@@ -0,0 +1,53 @@
|
||||
if ($IsLinux -or $IsMacOS) {
|
||||
if (-not (Get-Command 'Get-Service' -ErrorAction SilentlyContinue)) {
|
||||
function Get-Service {
|
||||
Import-Clixml -Path (Join-Path $PSScriptRoot Get-Service.xml)
|
||||
}
|
||||
}
|
||||
if (-not (Get-Command 'Get-CimInstance' -ErrorAction SilentlyContinue)) {
|
||||
function Get-CimInstance {
|
||||
param (
|
||||
$ClassName,
|
||||
$Namespace,
|
||||
$class
|
||||
)
|
||||
if ($ClassName -eq 'win32_logicaldisk') {
|
||||
Import-Clixml -Path (Join-Path $PSScriptRoot Get-CimInstanceDisk.xml)
|
||||
}
|
||||
elseif ($class -eq 'MSFT_NetAdapter') {
|
||||
Import-Clixml -Path (Join-Path $PSScriptRoot Get-CimInstanceNetAdapter.xml)
|
||||
}
|
||||
}
|
||||
}
|
||||
function Get-Process {
|
||||
param (
|
||||
$Name,
|
||||
$Id
|
||||
)
|
||||
if (-not $Name) {
|
||||
if ($Id) {
|
||||
(Import-Clixml -Path (Join-Path $PSScriptRoot Get-Process.xml))[0]
|
||||
}
|
||||
else {
|
||||
Import-Clixml -Path (Join-Path $PSScriptRoot Get-Process.xml)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
<# Creating the samples
|
||||
Get-Service | Select-Object -First 30 | Export-Clixml -Path Get-Service.xml
|
||||
|
||||
$Disk = Get-CimInstance -ClassName win32_logicaldisk | Select-Object -Property DeviceId,VolumeName, Size,Freespace
|
||||
$Disk | Export-Clixml -Path Get-CimInstanceDisk.xml
|
||||
|
||||
$NetAdapter = Get-CimInstance -Namespace root/StandardCimv2 -class MSFT_NetAdapter | Select-Object -Property Name, InterfaceDescription, MacAddress, LinkSpeed
|
||||
$NetAdapter | Export-Clixml -Path Get-CimInstanceNetAdapter.xml
|
||||
|
||||
$Process = Get-Process | Where-Object { $_.StartTime -and $_.StartInfo -and $_.Modules -and $_.Company -notlike '*Microsoft*' } | Select-Object -first 20
|
||||
$Process | Export-Clixml -Path $Path
|
||||
$Process = Import-Clixml -Path $Path
|
||||
$Process | foreach {$_.Threads = 'System.Diagnostics.ProcessThreadCollection'}
|
||||
$Process | foreach {$_.Modules = 'System.Diagnostics.ProcessThreadCollection'}
|
||||
$Process | Export-Clixml -Path $Path
|
||||
#>
|
||||
@@ -1,6 +1,4 @@
|
||||
Import-Module $PSScriptRoot\..\ImportExcel.psd1 -Force
|
||||
if (-not $env:TEMP) {$env:TEMP = [IO.Path]::GetTempPath() -replace "/$","" }
|
||||
$path = Join-Path $Env:TEMP "test.xlsx"
|
||||
$path = "TestDrive:\test.xlsx"
|
||||
|
||||
$data = ConvertFrom-Csv -InputObject @"
|
||||
ID,Product,Quantity,Price
|
||||
@@ -284,7 +282,7 @@ Describe "Set-ExcelColumn, Set-ExcelRow and Set-ExcelRange" {
|
||||
|
||||
Describe "Conditional Formatting" {
|
||||
BeforeAll {
|
||||
Remove-Item $path
|
||||
#Remove-Item $path
|
||||
$data = Get-Process | Where-Object company | Select-Object company, name, pm, handles, *mem*
|
||||
$cfmt = New-ConditionalFormattingIconSet -Range "c:c" -ConditionalFormat ThreeIconSet -IconType Arrows
|
||||
$data | Export-Excel -path $Path -AutoSize -ConditionalFormat $cfmt
|
||||
@@ -300,7 +298,7 @@ Describe "Conditional Formatting" {
|
||||
}
|
||||
|
||||
}
|
||||
$path = Join-Path $Env:TEMP "test.xlsx"
|
||||
$path = "TestDrive:\test.xlsx"
|
||||
$data2 = ConvertFrom-Csv -InputObject @"
|
||||
ID,Product,Quantity,Price,Total
|
||||
12001,Nails,37,3.99,147.63
|
||||
@@ -321,7 +319,7 @@ ID,Product,Quantity,Price,Total
|
||||
|
||||
Describe "AutoNameRange data with a single property name" {
|
||||
BeforeEach {
|
||||
$xlfile = Join-Path $Env:TEMP "testNamedRange.xlsx"
|
||||
$xlfile = "TestDrive:\testNamedRange.xlsx"
|
||||
Remove-Item $xlfile -ErrorAction SilentlyContinue
|
||||
}
|
||||
|
||||
@@ -359,7 +357,7 @@ Sold,ID
|
||||
|
||||
Describe "Table Formatting" {
|
||||
BeforeAll {
|
||||
Remove-Item $path
|
||||
#Remove-Item $path
|
||||
$excel = $data2 | Export-excel -path $path -WorksheetName Hardware -AutoNameRange -AutoSize -BoldTopRow -FreezeTopRow -PassThru
|
||||
$ws = $excel.Workbook.Worksheets[1]
|
||||
#test showfilter & TotalSettings
|
||||
|
||||
@@ -1,7 +1,3 @@
|
||||
Import-Module $PSScriptRoot\..\ImportExcel.psd1 -Force
|
||||
if (-not $env:TEMP) {$env:TEMP = [IO.Path]::GetTempPath() -replace "/$","" }
|
||||
$notWindows = ($PSVersionTable.os -and $PSVersionTable.os -notMatch 'Windows' )
|
||||
|
||||
$data = ConvertFrom-Csv -InputObject @"
|
||||
ID,Product,Quantity,Price
|
||||
12001,Nails,37,3.99
|
||||
@@ -11,7 +7,7 @@ ID,Product,Quantity,Price
|
||||
12011,Crowbar,7,23.48
|
||||
"@
|
||||
|
||||
$path = Join-Path $Env:TEMP "DataValidation.xlsx"
|
||||
$path = "TestDrive:\DataValidation.xlsx"
|
||||
|
||||
Describe "Data validation and protection" {
|
||||
Context "Data Validation rules" {
|
||||
|
||||
72
appveyor.yml
72
appveyor.yml
@@ -1,17 +1,67 @@
|
||||
image:
|
||||
- Visual Studio 2015
|
||||
# - Ubuntu
|
||||
# Version format
|
||||
version: '({build})'
|
||||
|
||||
# Build worker image (VM templates)
|
||||
image:
|
||||
- Ubuntu1804
|
||||
- 'Visual Studio 2019'
|
||||
|
||||
# Fix CRLF on Windows
|
||||
init:
|
||||
- cmd: 'git config --global --unset core.autocrlf'
|
||||
|
||||
# To disable automatic builds
|
||||
build: off
|
||||
|
||||
test_script:
|
||||
- ps: .\DoTests.ps1
|
||||
- pwsh: .\DoTests.ps1 -DontCreateZip
|
||||
|
||||
# Skipping commits with particular message or from specific user
|
||||
skip_commits:
|
||||
message: '/\[skip av\]/'
|
||||
files:
|
||||
- README.md
|
||||
- '*.md'
|
||||
|
||||
artifacts:
|
||||
- path: ImportExcel*.zip
|
||||
name: ImportExcel
|
||||
# Including commits with particular message or from specific user
|
||||
#only_commits:
|
||||
# message: '/\[build\]/' # Start a new build if message contains 'build'
|
||||
|
||||
# Scripts that run after cloning repository
|
||||
install:
|
||||
- ps: 'Install-Module -Name Pester -Force -SkipPublisherCheck'
|
||||
- ps: 'Install-Module -Name Assert -Force'
|
||||
# PowerShell Core
|
||||
- ps: '& .\__tests__\InstallPowerShell.ps1 -Version "7.0.0-preview.3"' # Install other PowerShell Core version (Optional)
|
||||
- pwsh: 'Install-Module -Name Pester -Force'
|
||||
- pwsh: 'Install-Module -Name Assert -Force'
|
||||
|
||||
# To run your custom scripts instead of automatic tests
|
||||
test_script:
|
||||
- ps: '& .\__tests__\CI.ps1 -Test'
|
||||
- pwsh: '& .\__tests__\CI.ps1 -Test'
|
||||
- ps: '& .\__tests__\CI.ps1 -Finalize' # Collect and upload results
|
||||
|
||||
# Deploy
|
||||
deploy_script:
|
||||
- ps: '& .\__tests__\CI.ps1 -Artifact'
|
||||
#- ps: '$null = Install-PackageProvider -Name NuGet -Force ; & .\__tests__\Publish.ps1'
|
||||
|
||||
# Linux setup
|
||||
for:
|
||||
-
|
||||
matrix:
|
||||
only:
|
||||
- image: Ubuntu1804
|
||||
# Install other PowerShell Core version (Optional)
|
||||
init:
|
||||
- sh: 'sudo apt-get -qq update && sudo apt-get -qq install powershell-preview && sudo rm /usr/bin/pwsh && sudo ln -s /opt/microsoft/powershell/7-preview/pwsh /usr/bin/pwsh'
|
||||
- sh: 'export LANG=en_US.UTF-8' # Fix for PowerShell 7.0.0-preview.2, Remove if using other version.
|
||||
# Scripts that run after cloning repository
|
||||
install:
|
||||
- pwsh: '& .\__tests__\CI.ps1 -Initialize' # Set AppVeyor build version
|
||||
- pwsh: 'Install-Module -Name Pester -Force'
|
||||
- pwsh: 'Install-Module -Name Assert -Force'
|
||||
# To run your custom scripts instead of automatic tests
|
||||
test_script:
|
||||
- pwsh: '& .\__tests__\CI.ps1 -Test'
|
||||
- pwsh: '& .\__tests__\CI.ps1 -Finalize' # Collect and upload results
|
||||
# Skip Deploy
|
||||
deploy_script:
|
||||
- pwsh: '"Deploy skiped on Linux."'
|
||||
@@ -1,44 +1,93 @@
|
||||
jobs:
|
||||
- job: Build_PS_Win2016
|
||||
pool:
|
||||
vmImage: vs2017-win2016
|
||||
steps:
|
||||
- powershell: |
|
||||
.\DoTests.ps1
|
||||
displayName: 'Run Tests on Windows'
|
||||
|
||||
# - job: Build_PSCore_Ubuntu1604
|
||||
|
||||
# pool:
|
||||
# vmImage: ubuntu-16.04
|
||||
|
||||
# steps:
|
||||
# - script: |
|
||||
# curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
|
||||
# curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list | sudo tee /etc/apt/sources.list.d/microsoft.list
|
||||
# sudo apt-get update
|
||||
# sudo apt-get install -y powershell
|
||||
# displayName: 'Install PowerShell Core'
|
||||
|
||||
# - script: |
|
||||
# pwsh -c '.\DoTests.ps1'
|
||||
# displayName: 'Run Tests on Linux'
|
||||
|
||||
# - job: Build_PSCore_MacOS1013
|
||||
# pool:
|
||||
# vmImage: xcode9-macos10.13
|
||||
# steps:
|
||||
# - script: |
|
||||
# brew update
|
||||
# brew tap caskroom/cask
|
||||
# brew cask install powershell
|
||||
# displayName: 'Install PowerShell Core'
|
||||
|
||||
# - script: |
|
||||
# pwsh -c '.\DoTests.ps1'
|
||||
# displayName: 'Run Tests on macOS'
|
||||
# Starter pipeline
|
||||
# Start with a minimal pipeline that you can customize to build and deploy your code.
|
||||
# Add steps that build, run tests, deploy, and more:
|
||||
# https://aka.ms/yaml
|
||||
|
||||
trigger:
|
||||
branches:
|
||||
include:
|
||||
- '*'
|
||||
# - master
|
||||
# - releases/*
|
||||
paths:
|
||||
exclude:
|
||||
- README.md
|
||||
- CHANGELOG.md
|
||||
|
||||
jobs:
|
||||
- job: Windows
|
||||
pool:
|
||||
vmImage: 'windows-latest'
|
||||
|
||||
steps:
|
||||
- powershell: 'Install-Module -Name Pester -Force -SkipPublisherCheck'
|
||||
displayName: 'Update Pester'
|
||||
- powershell: './__tests__/CI.ps1 -Test'
|
||||
displayName: 'Install and Test'
|
||||
|
||||
- task: PublishTestResults@2
|
||||
inputs:
|
||||
testResultsFormat: 'NUnit'
|
||||
testResultsFiles: '**/TestResults*.xml'
|
||||
failTaskOnFailedTests: true
|
||||
|
||||
- powershell: './__tests__/CI.ps1 -Artifact'
|
||||
displayName: 'Prepare Artifact'
|
||||
- task: PublishPipelineArtifact@1
|
||||
inputs:
|
||||
targetPath: '$(Build.ArtifactStagingDirectory)'
|
||||
artifact: 'Modules'
|
||||
- task: PublishPipelineArtifact@1
|
||||
inputs:
|
||||
targetPath: '$(Build.SourcesDirectory)'
|
||||
artifact: 'Source'
|
||||
|
||||
- job: WindowsPSCore
|
||||
pool:
|
||||
vmImage: 'windows-latest'
|
||||
|
||||
steps:
|
||||
- pwsh: 'Install-Module -Name Pester -Force'
|
||||
displayName: 'Update Pester'
|
||||
- pwsh: './__tests__/CI.ps1 -Test'
|
||||
displayName: 'Install and Test'
|
||||
|
||||
- task: PublishTestResults@2
|
||||
inputs:
|
||||
testResultsFormat: 'NUnit'
|
||||
testResultsFiles: '**/TestResults*.xml'
|
||||
failTaskOnFailedTests: true
|
||||
|
||||
- job: Ubuntu
|
||||
pool:
|
||||
vmImage: 'ubuntu-latest'
|
||||
|
||||
steps:
|
||||
- powershell: 'Install-Module -Name Pester -Force'
|
||||
displayName: 'Update Pester'
|
||||
- powershell: './__tests__/CI.ps1 -Test'
|
||||
displayName: 'Install and Test'
|
||||
|
||||
- task: PublishTestResults@2
|
||||
inputs:
|
||||
testResultsFormat: 'NUnit'
|
||||
testResultsFiles: '**/TestResults*.xml'
|
||||
failTaskOnFailedTests: true
|
||||
|
||||
- job: macOS
|
||||
pool:
|
||||
vmImage: 'macOS-latest'
|
||||
|
||||
steps:
|
||||
- script: brew install mono-libgdiplus
|
||||
displayName: 'Install mono-libgdiplus'
|
||||
- powershell: 'Install-Module -Name Pester -Force'
|
||||
displayName: 'Update Pester'
|
||||
- powershell: './__tests__/CI.ps1 -Test'
|
||||
displayName: 'Install and Test'
|
||||
|
||||
- task: PublishTestResults@2
|
||||
inputs:
|
||||
testResultsFormat: 'NUnit'
|
||||
testResultsFiles: '**/TestResults*.xml'
|
||||
failTaskOnFailedTests: true
|
||||
@@ -2,17 +2,18 @@
|
||||
*.psd1
|
||||
*.psm1
|
||||
AddConditionalFormatting.ps1
|
||||
AddDataValidation.ps1
|
||||
Charting.ps1
|
||||
ColorCompletion.ps1
|
||||
Compare-Worksheet.ps1
|
||||
Compare-WorkSheet.ps1
|
||||
ConvertExcelToImageFile.ps1
|
||||
ConvertFromExcelData.ps1
|
||||
ConvertFromExcelToSQLInsert.ps1
|
||||
ConvertToExcelXlsx.ps1
|
||||
Copy-ExcelWorkSheet.ps1
|
||||
Export-Charts.ps1
|
||||
Export-Excel.ps1
|
||||
Export-ExcelSheet.ps1
|
||||
Export-StocksToExcel.ps1
|
||||
Get-ExcelColumnName.ps1
|
||||
Get-ExcelSheetInfo.ps1
|
||||
Get-ExcelWorkbookInfo.ps1
|
||||
@@ -32,10 +33,12 @@ Open-ExcelPackage.ps1
|
||||
Pivot.ps1
|
||||
PivotTable.ps1
|
||||
Plot.ps1
|
||||
RemoveWorksheet.ps1
|
||||
Send-SQLDataToExcel.ps1
|
||||
Set-CellStyle.ps1
|
||||
Set-Column.ps1
|
||||
Set-Row.ps1
|
||||
Set-WorkSheetProtection.ps1
|
||||
SetFormat.ps1
|
||||
TrackingUtils.ps1
|
||||
Update-FirstObjectProperties.ps1
|
||||
Reference in New Issue
Block a user