mirror of
https://github.com/dfinke/ImportExcel.git
synced 2025-12-14 23:33:18 +00:00
Compare commits
16 Commits
add-spectr
...
fix-import
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
16e2319124 | ||
|
|
c1b395fac6 | ||
|
|
0d8d125222 | ||
|
|
f77ee7b060 | ||
|
|
8ff1757c06 | ||
|
|
ab526558a3 | ||
|
|
61744012cd | ||
|
|
2cb4712bc5 | ||
|
|
6847a49baa | ||
|
|
b8a8f4c565 | ||
|
|
edf25cf946 | ||
|
|
77ec946b84 | ||
|
|
637c11c2e6 | ||
|
|
cd2a70197c | ||
|
|
d99bd8fc9e | ||
|
|
23f1d92c1b |
3
.github/workflows/ci.yml
vendored
3
.github/workflows/ci.yml
vendored
@@ -3,8 +3,11 @@ on:
|
||||
branches:
|
||||
- master
|
||||
- Set-up-GHA-CI/CD
|
||||
paths-ignore:
|
||||
- 'Examples/**'
|
||||
|
||||
pull_request:
|
||||
|
||||
|
||||
jobs:
|
||||
validate:
|
||||
|
||||
35
Examples/Charts/ChartDataSeparatePage.ps1
Normal file
35
Examples/Charts/ChartDataSeparatePage.ps1
Normal file
@@ -0,0 +1,35 @@
|
||||
$data = ConvertFrom-Csv @"
|
||||
Region,State,Units,Price
|
||||
West,Texas,927,923.71
|
||||
North,Tennessee,466,770.67
|
||||
East,Florida,520,458.68
|
||||
East,Maine,828,661.24
|
||||
West,Virginia,465,053.58
|
||||
North,Missouri,436,235.67
|
||||
South,Kansas,214,992.47
|
||||
North,North Dakota,789,640.72
|
||||
South,Delaware,712,508.55
|
||||
"@
|
||||
|
||||
$xlfile = "$PSScriptRoot\spike.xlsx"
|
||||
Remove-Item $xlfile -ErrorAction SilentlyContinue
|
||||
|
||||
$xlpkg = $data | Export-Excel $xlfile -WorksheetName Data -AutoNameRange -PassThru
|
||||
|
||||
$null = Add-Worksheet -ExcelPackage $xlpkg -WorksheetName Summary -Activate
|
||||
|
||||
$params = @{
|
||||
Worksheet = $xlpkg.Summary
|
||||
Title = "Sales by Region"
|
||||
ChartType = 'ColumnClustered'
|
||||
|
||||
# XRange = "Data!A2:A10"
|
||||
# YRange = "Data!C2:C10"
|
||||
|
||||
XRange = 'Data!Region'
|
||||
YRange = 'Data!Units'
|
||||
}
|
||||
|
||||
Add-ExcelChart @params
|
||||
|
||||
Close-ExcelPackage $xlpkg -Show
|
||||
@@ -6,7 +6,7 @@
|
||||
RootModule = 'ImportExcel.psm1'
|
||||
|
||||
# Version number of this module.
|
||||
ModuleVersion = '7.8.4'
|
||||
ModuleVersion = '7.8.6'
|
||||
|
||||
# ID used to uniquely identify this module
|
||||
GUID = '60dd4136-feff-401a-ba27-a84458c57ede'
|
||||
@@ -54,6 +54,7 @@ Check out the How To Videos https://www.youtube.com/watch?v=U3Ne_yX4tYo&list=PL5
|
||||
'Export-Excel',
|
||||
'Export-ExcelSheet',
|
||||
'Get-ExcelColumnName',
|
||||
'Get-ExcelFileSchema',
|
||||
'Get-ExcelFileSummary',
|
||||
'Get-ExcelSheetDimensionAddress',
|
||||
'Get-ExcelSheetInfo',
|
||||
|
||||
@@ -8,7 +8,8 @@ function ConvertFrom-ExcelData {
|
||||
[ScriptBlock]$ScriptBlock,
|
||||
[Alias("Sheet")]
|
||||
$WorksheetName = 1,
|
||||
[int]$HeaderRow = 1,
|
||||
[Alias('HeaderRow', 'TopRow')]
|
||||
[int]$StartRow = 1,
|
||||
[string[]]$Header,
|
||||
[switch]$NoHeader,
|
||||
[switch]$DataOnly
|
||||
|
||||
47
Public/Get-ExcelFileSchema.ps1
Normal file
47
Public/Get-ExcelFileSchema.ps1
Normal file
@@ -0,0 +1,47 @@
|
||||
function Get-ExcelFileSchema {
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Gets the schema of an Excel file.
|
||||
|
||||
.DESCRIPTION
|
||||
The Get-ExcelFileSchema function gets the schema of an Excel file by returning the property names of the first row of each worksheet in the file.
|
||||
|
||||
.PARAMETER Path
|
||||
Specifies the path to the Excel file.
|
||||
|
||||
.PARAMETER Compress
|
||||
Indicates whether to compress the json output.
|
||||
|
||||
.OUTPUTS
|
||||
Json
|
||||
|
||||
.EXAMPLE
|
||||
Get-ExcelFileSchema -Path .\example.xlsx
|
||||
#>
|
||||
|
||||
[CmdletBinding()]
|
||||
param(
|
||||
[Parameter(ValueFromPipelineByPropertyName, Mandatory)]
|
||||
[Alias('FullName')]
|
||||
$Path,
|
||||
[Switch]$Compress
|
||||
)
|
||||
|
||||
Begin {
|
||||
$result = @()
|
||||
}
|
||||
|
||||
Process {
|
||||
$excelFiles = Get-ExcelFileSummary $Path
|
||||
|
||||
foreach ($excelFile in $excelFiles) {
|
||||
$data = Import-Excel $Path -WorksheetName $excelFile.WorksheetName | Select-Object -First 1
|
||||
$names = $data[0].PSObject.Properties.name
|
||||
$result += $excelFile | Add-Member -MemberType NoteProperty -Name "PropertyNames" -Value $names -PassThru
|
||||
}
|
||||
}
|
||||
|
||||
End {
|
||||
$result | ConvertTo-Json -Compress:$Compress
|
||||
}
|
||||
}
|
||||
@@ -37,8 +37,7 @@
|
||||
[ValidateNotNullOrEmpty()]
|
||||
[String]$Password,
|
||||
[Int[]]$ImportColumns,
|
||||
[Switch]$Raw,
|
||||
[Switch]$UseSpectre
|
||||
[Switch]$Raw
|
||||
)
|
||||
end {
|
||||
$sw = [System.Diagnostics.Stopwatch]::StartNew()
|
||||
@@ -253,9 +252,6 @@
|
||||
$entry.Value
|
||||
}
|
||||
}
|
||||
elseif ($UseSpectre) {
|
||||
$xlBook | Format-SpectreTable
|
||||
}
|
||||
elseif ($Worksheet.Count -eq 1) {
|
||||
$xlBook["$targetSheetname"]
|
||||
}
|
||||
|
||||
@@ -19,10 +19,13 @@ Consider donating. Thank you!
|
||||
<br>
|
||||
<br>
|
||||
|
||||
[](https://dougfinke.visualstudio.com/ImportExcel/_build)
|
||||
[](https://twitter.com/dfinke)
|
||||
[](https://youtube.com/@dougfinke/)
|
||||
<br/>
|
||||
<br/>
|
||||
[](https://www.powershellgallery.com/packages/ImportExcel)
|
||||
[](https://www.powershellgallery.com/packages/ImportExcel)
|
||||
[](https://github.com/dfinke/ImportExcel/tree/70ab9e46c776e96fb287682d5b9b4b51a0ec3bac/LICENSE.txt)
|
||||
<a href="https://www.paypal.com/paypalme/DougCharlesFinke"><img src="https://img.shields.io/badge/Donate-PayPal-green.svg" alt="Donate"></a>
|
||||
|
||||
# Overview
|
||||
|
||||
54
__tests__/Get-ExcelFileSchema.tests.ps1
Normal file
54
__tests__/Get-ExcelFileSchema.tests.ps1
Normal file
@@ -0,0 +1,54 @@
|
||||
if (-not (Get-command Import-Excel -ErrorAction SilentlyContinue)) {
|
||||
Import-Module $PSScriptRoot\..\ImportExcel.psd1
|
||||
}
|
||||
|
||||
Describe "Test getting the schema of an Excel file" -Tag GetExcelFileSchema {
|
||||
|
||||
BeforeAll {
|
||||
$script:excelFile = "TestDrive:\test.xlsx"
|
||||
$data = ConvertFrom-Csv @"
|
||||
Region,State,Units,Price
|
||||
West,Texas,927,923.71
|
||||
North,Tennessee,466,770.67
|
||||
East,Florida,520,458.68
|
||||
East,Maine,828,661.24
|
||||
West,Virginia,465,053.58
|
||||
North,Missouri,436,235.67
|
||||
South,Kansas,214,992.47
|
||||
North,North Dakota,789,640.72
|
||||
South,Delaware,712,508.55
|
||||
"@
|
||||
$data | Export-Excel $excelFile
|
||||
}
|
||||
|
||||
It "Test Get-ExcelFileSchema function exists" {
|
||||
$function = Get-Command Get-ExcelFileSchema -ErrorAction SilentlyContinue
|
||||
$function | Should -Not -Be $null
|
||||
}
|
||||
|
||||
It "Test Get-ExcelFileSchema returns json" {
|
||||
$actual = Get-ExcelFileSchema -Path $excelFile
|
||||
$actual | Should -Not -Be $null
|
||||
$actual | Should -BeOfType [string]
|
||||
}
|
||||
|
||||
It "Test Get-ExcelFileSchema correct json" {
|
||||
$actual = Get-ExcelFileSchema -Path $excelFile
|
||||
$actual = $actual | ConvertFrom-Json
|
||||
|
||||
$actual.ExcelFile | Should -BeExactly "test.xlsx"
|
||||
$actual.WorksheetName | Should -BeExactly "Sheet1"
|
||||
$actual.Visible | Should -Be $true
|
||||
$actual.Rows | Should -Be 10
|
||||
$actual.Columns | Should -Be 4
|
||||
$actual.Address | Should -BeExactly "A1:D10"
|
||||
|
||||
$actual.Path | Should -BeExactly ("TestDrive:" + [System.IO.Path]::DirectorySeparatorChar)
|
||||
|
||||
$actual.PropertyNames.Count | Should -Be 4
|
||||
$actual.PropertyNames[0] | Should -BeExactly "Region"
|
||||
$actual.PropertyNames[1] | Should -BeExactly "State"
|
||||
$actual.PropertyNames[2] | Should -BeExactly "Units"
|
||||
$actual.PropertyNames[3] | Should -BeExactly "Price"
|
||||
}
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
41
changelog.md
41
changelog.md
@@ -1,3 +1,44 @@
|
||||
# 7.8.7
|
||||
|
||||
-
|
||||
|
||||
# Infrastructure change
|
||||
|
||||
- Thank you to [RipFence](https://github.com/RipFence) who asked how to place a chart on a different sheet from the data and then did a PR adding the example.
|
||||
- added `ignore` so files checked into examples do not trigger a CI run
|
||||
|
||||
# 7.8.6
|
||||
|
||||
- Thank you [John Boyne](https://github.com/kyllath)
|
||||
- Add missing parameter aliases to align with caller/callee
|
||||
|
||||
# 7.8.5
|
||||
|
||||
- Added `Get-ExcelFileSchema` to get the schema of an Excel file.
|
||||
- This was added to support interacting with `ChatGPT`. Passing the schema to the `ChatGPT` via `PowerShellAI` let's you ask questions about the data including generating code based on the schema.
|
||||
|
||||
```powershell
|
||||
Get-ExcelFileSchema .\salesData.xlsx
|
||||
```
|
||||
|
||||
```json
|
||||
{
|
||||
"ExcelFile": "salesData.xlsx",
|
||||
"WorksheetName": "Sheet1",
|
||||
"Visible": true,
|
||||
"Rows": 10,
|
||||
"Columns": 4,
|
||||
"Address": "A1:D10",
|
||||
"Path": ".",
|
||||
"PropertyNames": [
|
||||
"Region",
|
||||
"State",
|
||||
"Units",
|
||||
"Price"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
# 7.8.x
|
||||
|
||||
Thanks to [Thomas Hofkens](https://github.com/thkn-hofa)
|
||||
|
||||
Reference in New Issue
Block a user