mirror of
https://github.com/dfinke/ImportExcel.git
synced 2025-12-27 05:33:26 +00:00
Compare commits
44 Commits
thkn-hofa-
...
copilot/fi
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5040fc0542 | ||
|
|
f62aff64db | ||
|
|
bc289afc6b | ||
|
|
5387c06146 | ||
|
|
45ed6a06dc | ||
|
|
fa447a745c | ||
|
|
49affcfba7 | ||
|
|
dc4a5e9db9 | ||
|
|
85e48acf36 | ||
|
|
fb41d3de83 | ||
|
|
db84a59dd0 | ||
|
|
5a61c5dda4 | ||
|
|
a2bc50aeb0 | ||
|
|
fa907da4a4 | ||
|
|
24c205e65d | ||
|
|
a1418a336e | ||
|
|
63683db543 | ||
|
|
36b5495bd5 | ||
|
|
722516de7c | ||
|
|
57bb049111 | ||
|
|
74cbca8b2f | ||
|
|
53712d4f7f | ||
|
|
98e2ac96ea | ||
|
|
efa73b37a0 | ||
|
|
c1b395fac6 | ||
|
|
0d8d125222 | ||
|
|
f77ee7b060 | ||
|
|
8ff1757c06 | ||
|
|
ab526558a3 | ||
|
|
61744012cd | ||
|
|
2cb4712bc5 | ||
|
|
6847a49baa | ||
|
|
b8a8f4c565 | ||
|
|
edf25cf946 | ||
|
|
77ec946b84 | ||
|
|
637c11c2e6 | ||
|
|
cd2a70197c | ||
|
|
d99bd8fc9e | ||
|
|
23f1d92c1b | ||
|
|
ab4d03c984 | ||
|
|
ca4dfb7040 | ||
|
|
a9eca05303 | ||
|
|
195efdea54 | ||
|
|
24e5fccafe |
3
.github/workflows/ci.yml
vendored
3
.github/workflows/ci.yml
vendored
@@ -3,8 +3,11 @@ on:
|
||||
branches:
|
||||
- master
|
||||
- Set-up-GHA-CI/CD
|
||||
paths-ignore:
|
||||
- 'Examples/**'
|
||||
|
||||
pull_request:
|
||||
|
||||
|
||||
jobs:
|
||||
validate:
|
||||
|
||||
35
Examples/Charts/ChartDataSeparatePage.ps1
Normal file
35
Examples/Charts/ChartDataSeparatePage.ps1
Normal file
@@ -0,0 +1,35 @@
|
||||
$data = ConvertFrom-Csv @"
|
||||
Region,State,Units,Price
|
||||
West,Texas,927,923.71
|
||||
North,Tennessee,466,770.67
|
||||
East,Florida,520,458.68
|
||||
East,Maine,828,661.24
|
||||
West,Virginia,465,053.58
|
||||
North,Missouri,436,235.67
|
||||
South,Kansas,214,992.47
|
||||
North,North Dakota,789,640.72
|
||||
South,Delaware,712,508.55
|
||||
"@
|
||||
|
||||
$xlfile = "$PSScriptRoot\spike.xlsx"
|
||||
Remove-Item $xlfile -ErrorAction SilentlyContinue
|
||||
|
||||
$xlpkg = $data | Export-Excel $xlfile -WorksheetName Data -AutoNameRange -PassThru
|
||||
|
||||
$null = Add-Worksheet -ExcelPackage $xlpkg -WorksheetName Summary -Activate
|
||||
|
||||
$params = @{
|
||||
Worksheet = $xlpkg.Summary
|
||||
Title = "Sales by Region"
|
||||
ChartType = 'ColumnClustered'
|
||||
|
||||
# XRange = "Data!A2:A10"
|
||||
# YRange = "Data!C2:C10"
|
||||
|
||||
XRange = 'Data!Region'
|
||||
YRange = 'Data!Units'
|
||||
}
|
||||
|
||||
Add-ExcelChart @params
|
||||
|
||||
Close-ExcelPackage $xlpkg -Show
|
||||
@@ -6,7 +6,7 @@
|
||||
RootModule = 'ImportExcel.psm1'
|
||||
|
||||
# Version number of this module.
|
||||
ModuleVersion = '7.8.4'
|
||||
ModuleVersion = '7.8.10'
|
||||
|
||||
# ID used to uniquely identify this module
|
||||
GUID = '60dd4136-feff-401a-ba27-a84458c57ede'
|
||||
@@ -54,6 +54,7 @@ Check out the How To Videos https://www.youtube.com/watch?v=U3Ne_yX4tYo&list=PL5
|
||||
'Export-Excel',
|
||||
'Export-ExcelSheet',
|
||||
'Get-ExcelColumnName',
|
||||
'Get-ExcelFileSchema',
|
||||
'Get-ExcelFileSummary',
|
||||
'Get-ExcelSheetDimensionAddress',
|
||||
'Get-ExcelSheetInfo',
|
||||
@@ -149,7 +150,7 @@ Check out the How To Videos https://www.youtube.com/watch?v=U3Ne_yX4tYo&list=PL5
|
||||
Tags = @("Excel", "EPPlus", "Export", "Import")
|
||||
|
||||
# The web address of an icon which can be used in galleries to represent this module
|
||||
#IconUri = "http://pesterbdd.com/images/Pester.png"
|
||||
#IconUri =
|
||||
|
||||
# The web address of this module's project or support homepage.
|
||||
ProjectUri = "https://github.com/dfinke/ImportExcel"
|
||||
@@ -214,4 +215,4 @@ Check out the How To Videos https://www.youtube.com/watch?v=U3Ne_yX4tYo&list=PL5
|
||||
# Default prefix for commands exported from this module. Override the default prefix using Import-Module -Prefix.
|
||||
# DefaultCommandPrefix = ''
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -67,9 +67,8 @@ function WorksheetArgumentCompleter {
|
||||
param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameter)
|
||||
$xlPath = $fakeBoundParameter['Path']
|
||||
if (Test-Path -Path $xlPath) {
|
||||
$xlpkg = Open-ExcelPackage -ReadOnly -Path $xlPath
|
||||
$WorksheetNames = $xlPkg.Workbook.Worksheets.Name
|
||||
Close-ExcelPackage -nosave -ExcelPackage $xlpkg
|
||||
$xlSheet = Get-ExcelSheetInfo -Path $xlPath
|
||||
$WorksheetNames = $xlSheet.Name
|
||||
$WorksheetNames.where( { $_ -like "*$wordToComplete*" }) | foreach-object {
|
||||
New-Object -TypeName System.Management.Automation.CompletionResult -ArgumentList "'$_'",
|
||||
$_ , ([System.Management.Automation.CompletionResultType]::ParameterValue) , $_
|
||||
|
||||
@@ -19,6 +19,9 @@ function Close-ExcelPackage {
|
||||
try { [OfficeOpenXml.CalculationExtension]::Calculate($ExcelPackage.Workbook) }
|
||||
catch { Write-Warning "One or more errors occured while calculating, save will continue, but there may be errors in the workbook." }
|
||||
}
|
||||
# Set FullCalcOnLoad to false to prevent Excel from corrupting formulas during recalculation
|
||||
# This fixes issues with table-structured references like [[#This Row],[ColumnName]]
|
||||
$ExcelPackage.Workbook.FullCalcOnLoad = $false
|
||||
if ($SaveAs) {
|
||||
$SaveAs = $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath($SaveAs)
|
||||
if ($Password) { $ExcelPackage.SaveAs( $SaveAs, $Password ) }
|
||||
|
||||
@@ -8,7 +8,8 @@ function ConvertFrom-ExcelData {
|
||||
[ScriptBlock]$ScriptBlock,
|
||||
[Alias("Sheet")]
|
||||
$WorksheetName = 1,
|
||||
[int]$HeaderRow = 1,
|
||||
[Alias('HeaderRow', 'TopRow')]
|
||||
[int]$StartRow = 1,
|
||||
[string[]]$Header,
|
||||
[switch]$NoHeader,
|
||||
[switch]$DataOnly
|
||||
|
||||
@@ -45,11 +45,18 @@ function ConvertTo-ExcelXlsx {
|
||||
throw "Could not create Excel.Application ComObject. Please verify that Excel is installed."
|
||||
}
|
||||
|
||||
$Excel.Visible = $false
|
||||
$null = $Excel.Workbooks.Open($xlsFile.FullName)
|
||||
$Excel.ActiveWorkbook.SaveAs($xlsxPath, $xlFixedFormat)
|
||||
$Excel.ActiveWorkbook.Close()
|
||||
$Excel.Quit()
|
||||
try {
|
||||
$Excel.Visible = $false
|
||||
$null = $Excel.Workbooks.Open($xlsFile.FullName, $null, $true)
|
||||
$Excel.ActiveWorkbook.SaveAs($xlsxPath, $xlFixedFormat)
|
||||
}
|
||||
finally {
|
||||
if ($null -ne $Excel.ActiveWorkbook) {
|
||||
$Excel.ActiveWorkbook.Close()
|
||||
}
|
||||
|
||||
$Excel.Quit()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -682,6 +682,9 @@
|
||||
else {
|
||||
if ($ReturnRange) { $dataRange }
|
||||
|
||||
# Set FullCalcOnLoad to false to prevent Excel from corrupting formulas during recalculation
|
||||
# This fixes issues with table-structured references like [[#This Row],[ColumnName]]
|
||||
$pkg.Workbook.FullCalcOnLoad = $false
|
||||
if ($Password) { $pkg.Save($Password) }
|
||||
else { $pkg.Save() }
|
||||
Write-Verbose -Message "Saved workbook $($pkg.File)"
|
||||
|
||||
47
Public/Get-ExcelFileSchema.ps1
Normal file
47
Public/Get-ExcelFileSchema.ps1
Normal file
@@ -0,0 +1,47 @@
|
||||
function Get-ExcelFileSchema {
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Gets the schema of an Excel file.
|
||||
|
||||
.DESCRIPTION
|
||||
The Get-ExcelFileSchema function gets the schema of an Excel file by returning the property names of the first row of each worksheet in the file.
|
||||
|
||||
.PARAMETER Path
|
||||
Specifies the path to the Excel file.
|
||||
|
||||
.PARAMETER Compress
|
||||
Indicates whether to compress the json output.
|
||||
|
||||
.OUTPUTS
|
||||
Json
|
||||
|
||||
.EXAMPLE
|
||||
Get-ExcelFileSchema -Path .\example.xlsx
|
||||
#>
|
||||
|
||||
[CmdletBinding()]
|
||||
param(
|
||||
[Parameter(ValueFromPipelineByPropertyName, Mandatory)]
|
||||
[Alias('FullName')]
|
||||
$Path,
|
||||
[Switch]$Compress
|
||||
)
|
||||
|
||||
Begin {
|
||||
$result = @()
|
||||
}
|
||||
|
||||
Process {
|
||||
$excelFiles = Get-ExcelFileSummary $Path
|
||||
|
||||
foreach ($excelFile in $excelFiles) {
|
||||
$data = Import-Excel $Path -WorksheetName $excelFile.WorksheetName | Select-Object -First 1
|
||||
$names = $data[0].PSObject.Properties.name
|
||||
$result += $excelFile | Add-Member -MemberType NoteProperty -Name "PropertyNames" -Value $names -PassThru
|
||||
}
|
||||
}
|
||||
|
||||
End {
|
||||
$result | ConvertTo-Json -Compress:$Compress
|
||||
}
|
||||
}
|
||||
@@ -50,7 +50,9 @@ function Get-HtmlTable {
|
||||
else {
|
||||
$h = ConvertFrom-Html -Content $r.Content
|
||||
if ($TableIndex -is [valuetype]) { $TableIndex += 1}
|
||||
$rows = $h.SelectNodes("//table[$TableIndex]//tr")
|
||||
$rows = try {
|
||||
$h.SelectSingleNode("//table[$TableIndex]").SelectNodes(".//tr")
|
||||
} catch {}
|
||||
if (-not $rows) {Write-Warning "Could not find rows for `"//table[$TableIndex]`" in $Url ."}
|
||||
if ( -not $propertyNames) {
|
||||
if ( $tableHeaders = $rows[$FirstDataRow].SelectNodes("th")) {
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
125
__tests__/TableFormula.tests.ps1
Normal file
125
__tests__/TableFormula.tests.ps1
Normal file
@@ -0,0 +1,125 @@
|
||||
#Requires -Modules @{ ModuleName="Pester"; ModuleVersion="4.0.0" }
|
||||
[Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseDeclaredVarsMoreThanAssignments', '', Justification = 'False Positives')]
|
||||
param()
|
||||
|
||||
Describe "Table Formula Bug Fix" -Tag "TableFormula" {
|
||||
BeforeAll {
|
||||
$WarningAction = "SilentlyContinue"
|
||||
}
|
||||
|
||||
Context "FullCalcOnLoad is set to false to prevent formula corruption" {
|
||||
BeforeAll {
|
||||
$path = "TestDrive:\table_formula.xlsx"
|
||||
Remove-Item -Path $path -ErrorAction SilentlyContinue
|
||||
|
||||
# Create a table with a blank record
|
||||
$BlankRecordForFile = [PsCustomObject]@{
|
||||
'Action Add' = ''
|
||||
UserName = ''
|
||||
Address = ''
|
||||
Name = ''
|
||||
NewName = ''
|
||||
}
|
||||
|
||||
# Export as a table
|
||||
$ExcelFile = $BlankRecordForFile | Export-Excel -Path $path -WorksheetName 'Data' `
|
||||
-TableName 'DataTable' -TableStyle 'Light1' -AutoSize:$false -AutoFilter `
|
||||
-BoldTopRow -FreezeTopRow -StartRow 1 -PassThru
|
||||
|
||||
$Worksheet = $ExcelFile.Workbook.Worksheets['Data']
|
||||
|
||||
# Insert a row and add a complex formula with table-structured references
|
||||
$Worksheet.InsertRow(2, 1)
|
||||
|
||||
# This formula uses old-style table references [[#This Row],[ColumnName]]
|
||||
# which Excel converts to [@ColumnName] when opening
|
||||
$Formula = '=IFS( [[#This Row],[UserName]]="","", [[#This Row],[Action Add]]=TRUE, CONCAT([[#This Row],[Address]],"-",[[#This Row],[UserName]]), CONCAT([[#This Row],[Address]],"-",[[#This Row],[UserName]]) <> [[#This Row],[Name]], CONCAT([[#This Row],[Address]],"-",[[#This Row],[UserName]]), TRUE, "")'
|
||||
|
||||
$Cell = $Worksheet.Cells['e2']
|
||||
$Cell.Formula = $Formula
|
||||
|
||||
Close-ExcelPackage $ExcelFile
|
||||
|
||||
# Reopen to verify
|
||||
$ExcelFile2 = Open-ExcelPackage -Path $path
|
||||
$Worksheet2 = $ExcelFile2.Workbook.Worksheets['Data']
|
||||
}
|
||||
|
||||
It "Sets fullCalcOnLoad to false in the workbook XML" {
|
||||
# Extract and check the XML directly
|
||||
$TempExtractPath = Join-Path -Path $TestDrive -ChildPath "extracted_$(Get-Random)"
|
||||
Expand-Archive -Path $path -DestinationPath $TempExtractPath -Force
|
||||
$WorkbookXml = Get-Content (Join-Path -Path $TempExtractPath -ChildPath "xl/workbook.xml") -Raw
|
||||
|
||||
$WorkbookXml | Should -Match 'fullCalcOnLoad="0"'
|
||||
|
||||
Remove-Item -Path $TempExtractPath -Recurse -Force
|
||||
}
|
||||
|
||||
It "Preserves the formula correctly after save and reopen" {
|
||||
$Cell2 = $Worksheet2.Cells['e2']
|
||||
$Cell2.Formula | Should -Not -BeNullOrEmpty
|
||||
$Cell2.Formula | Should -Match 'IFS\('
|
||||
$Cell2.Formula | Should -Match 'CONCAT\('
|
||||
}
|
||||
|
||||
It "Does not corrupt the formula with extra @ symbols" {
|
||||
$Cell2 = $Worksheet2.Cells['e2']
|
||||
# The formula should not have extra @ symbols added by Excel during recalculation
|
||||
# The specific bug was an @ being inserted before CONCAT in the middle of the formula
|
||||
# We can't test this directly without opening in Excel, but we can verify the formula is unchanged
|
||||
$Cell2.Formula.Length | Should -BeGreaterThan 100
|
||||
}
|
||||
|
||||
AfterAll {
|
||||
if ($ExcelFile2) {
|
||||
Close-ExcelPackage -ExcelPackage $ExcelFile2 -NoSave
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Context "FullCalcOnLoad setting works with different save methods" {
|
||||
It "Sets fullCalcOnLoad to false when using SaveAs" {
|
||||
$path = "TestDrive:\saveas_test.xlsx"
|
||||
$path2 = "TestDrive:\saveas_test2.xlsx"
|
||||
Remove-Item -Path $path, $path2 -ErrorAction SilentlyContinue
|
||||
|
||||
$data = [PSCustomObject]@{ Name = 'Test' }
|
||||
$excel = $data | Export-Excel -Path $path -PassThru
|
||||
|
||||
Close-ExcelPackage $excel -SaveAs $path2
|
||||
|
||||
# Extract and check the XML
|
||||
$TempExtractPath = Join-Path -Path $TestDrive -ChildPath "extracted_saveas_$(Get-Random)"
|
||||
Expand-Archive -Path $path2 -DestinationPath $TempExtractPath -Force
|
||||
$WorkbookXml = Get-Content (Join-Path -Path $TempExtractPath -ChildPath "xl/workbook.xml") -Raw
|
||||
|
||||
$WorkbookXml | Should -Match 'fullCalcOnLoad="0"'
|
||||
|
||||
Remove-Item -Path $TempExtractPath -Recurse -Force
|
||||
}
|
||||
|
||||
It "Sets fullCalcOnLoad to false when using Calculate flag" {
|
||||
$path = "TestDrive:\calculate_test.xlsx"
|
||||
Remove-Item -Path $path -ErrorAction SilentlyContinue
|
||||
|
||||
$data = [PSCustomObject]@{ Name = 'Test'; Value = 100 }
|
||||
$excel = $data | Export-Excel -Path $path -PassThru
|
||||
|
||||
# Set a formula
|
||||
$ws = $excel.Workbook.Worksheets[1]
|
||||
$ws.Cells['C2'].Formula = 'B2*2'
|
||||
|
||||
Close-ExcelPackage $excel -Calculate
|
||||
|
||||
# Extract and check the XML
|
||||
$TempExtractPath = Join-Path -Path $TestDrive -ChildPath "extracted_calc_$(Get-Random)"
|
||||
Expand-Archive -Path $path -DestinationPath $TempExtractPath -Force
|
||||
$WorkbookXml = Get-Content (Join-Path -Path $TempExtractPath -ChildPath "xl/workbook.xml") -Raw
|
||||
|
||||
$WorkbookXml | Should -Match 'fullCalcOnLoad="0"'
|
||||
|
||||
Remove-Item -Path $TempExtractPath -Recurse -Force
|
||||
}
|
||||
}
|
||||
}
|
||||
57
changelog.md
57
changelog.md
@@ -1,3 +1,60 @@
|
||||
# 7.8.10
|
||||
|
||||
- Thank you https://github.com/evenmartinsen for the PR to fix the AV
|
||||
|
||||
# 7.8.9
|
||||
|
||||
- Thanks to (Edward Miller)[https://github.com/edwardmiller-mesirow] for improving `ConvertTo-ExcelXlsx`and making it more robust
|
||||
|
||||
# 7.8.8
|
||||
|
||||
- Fix the release
|
||||
|
||||
# 7.8.7
|
||||
|
||||
- Thanks to [Phil Bossman](https://github.com/pbossman) for the PR and fixing this.
|
||||
|
||||
Now, back again, you can type `Import-Excel .\yearlySales.xlsx`, press <ctrl+space> and get a list of the worksheets in the Excel file
|
||||
|
||||

|
||||
|
||||
# Infrastructure change
|
||||
|
||||
- Thank you to [RipFence](https://github.com/RipFence) who asked how to place a chart on a different sheet from the data and then did a PR adding the example.
|
||||
- added `ignore` so files checked into examples do not trigger a CI run
|
||||
|
||||
# 7.8.6
|
||||
|
||||
- Thank you [John Boyne](https://github.com/kyllath)
|
||||
- Add missing parameter aliases to align with caller/callee
|
||||
|
||||
# 7.8.5
|
||||
|
||||
- Added `Get-ExcelFileSchema` to get the schema of an Excel file.
|
||||
- This was added to support interacting with `ChatGPT`. Passing the schema to the `ChatGPT` via `PowerShellAI` let's you ask questions about the data including generating code based on the schema.
|
||||
|
||||
```powershell
|
||||
Get-ExcelFileSchema .\salesData.xlsx
|
||||
```
|
||||
|
||||
```json
|
||||
{
|
||||
"ExcelFile": "salesData.xlsx",
|
||||
"WorksheetName": "Sheet1",
|
||||
"Visible": true,
|
||||
"Rows": 10,
|
||||
"Columns": 4,
|
||||
"Address": "A1:D10",
|
||||
"Path": ".",
|
||||
"PropertyNames": [
|
||||
"Region",
|
||||
"State",
|
||||
"Units",
|
||||
"Price"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
# 7.8.x
|
||||
|
||||
Thanks to [Thomas Hofkens](https://github.com/thkn-hofa)
|
||||
|
||||
BIN
images/AutoCompleteSheetNames.png
Normal file
BIN
images/AutoCompleteSheetNames.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 11 KiB |
5592
llms-examples.txt
Normal file
5592
llms-examples.txt
Normal file
File diff suppressed because it is too large
Load Diff
@@ -66,7 +66,7 @@ PS\> $excel = $avdata | Export-Excel -Path (Join-path $FilePath "\Machines.XLSX"
|
||||
$excel.Save() ; $excel.Dispose()
|
||||
```
|
||||
|
||||
Here Export-Excel is called with the -PassThru parameter, so the ExcelPackage object representing Machines.XLSX is stored in $Excel.The desired worksheet is selected, and then columns" B" and "I" are conditionally formatted \(excluding the top row\) to show red text if they contain "2003" or "Disabled" respectively.
|
||||
Here Export-Excel is called with the -PassThru parameter, so the ExcelPackage object representing Machines.XLSX is stored in $Excel. The desired worksheet is selected, and then columns" B" and "I" are conditionally formatted \(excluding the top row\) to show red text if they contain "2003" or "Disabled" respectively.
|
||||
|
||||
A fixed date format is then applied to columns D to G, and the top row is formatted.
|
||||
|
||||
@@ -83,7 +83,7 @@ Again Export-Excel has been called with -PassThru leaving a package object in $E
|
||||
|
||||
This time B1:B100 has been conditionally formatted with 3 icons, using the "Flags" Icon-Set.
|
||||
|
||||
Add-ConditionalFormatting does not provide accessto every option in the formatting rule, so -PassThru has been used and the rule is modified to apply the flags in reverse order, and transitions between flags are set to 100 and 1000.
|
||||
Add-ConditionalFormatting does not provide access to every option in the formatting rule, so -PassThru has been used and the rule is modified to apply the flags in reverse order, and transitions between flags are set to 100 and 1000.
|
||||
|
||||
### EXAMPLE 3
|
||||
|
||||
|
||||
@@ -81,7 +81,7 @@ PS\> $Excel = Invoke-Sum (Get-Process) Company Handles, PM, VirtualMemorySize |
|
||||
|
||||
The first line exports information to a table in new file; and captures the excel Package object in $Excel
|
||||
|
||||
The second line creates a chart on the first page of the work sheet, using the notation "TableName\[ColumnnName\]" to refer to the data, the labels come Name column in the table, and the data series from its PM and VirtualMemorySize columns. The display names for these in the header are set to 'PM' and 'VMSize'.
|
||||
The second line creates a chart on the first page of the work sheet, using the notation "TableName\[ColumnName\]" to refer to the data, the labels come Name column in the table, and the data series from its PM and VirtualMemorySize columns. The display names for these in the header are set to 'PM' and 'VMSize'.
|
||||
|
||||
### EXAMPLE 4
|
||||
|
||||
|
||||
Reference in New Issue
Block a user