mirror of
https://github.com/dfinke/ImportExcel.git
synced 2025-12-06 00:23:20 +00:00
Updated readme
This commit is contained in:
104
GetExcelTable.ps1
Normal file
104
GetExcelTable.ps1
Normal file
@@ -0,0 +1,104 @@
|
||||
Function Get-ExcelTableName {
|
||||
Param (
|
||||
$Path,
|
||||
$WorksheetName
|
||||
)
|
||||
|
||||
$Path = (Resolve-Path $Path).ProviderPath
|
||||
$Stream = New-Object -TypeName System.IO.FileStream -ArgumentList $Path, 'Open', 'Read', 'ReadWrite'
|
||||
|
||||
$Excel = New-Object -TypeName OfficeOpenXml.ExcelPackage -ArgumentList $Stream
|
||||
|
||||
if ($WorksheetName) {
|
||||
$Worksheet = $Excel.Workbook.Worksheets[$WorkSheetName]
|
||||
} else {
|
||||
$Worksheet = $Excel.Workbook.Worksheets | Select-Object -First 1
|
||||
}
|
||||
|
||||
foreach($TableName in $Worksheet.Tables.Name) {
|
||||
[PSCustomObject][Ordered]@{
|
||||
WorksheetName=$Worksheet.Name
|
||||
TableName=$TableName
|
||||
}
|
||||
}
|
||||
|
||||
$Stream.Close()
|
||||
$Stream.Dispose()
|
||||
$Excel.Dispose()
|
||||
$Excel = $null
|
||||
}
|
||||
|
||||
Function Get-ExcelTable {
|
||||
Param (
|
||||
$Path,
|
||||
$TableName,
|
||||
$WorksheetName
|
||||
)
|
||||
|
||||
$Path = (Resolve-Path $Path).ProviderPath
|
||||
$Stream = New-Object -TypeName System.IO.FileStream -ArgumentList $Path, 'Open', 'Read', 'ReadWrite'
|
||||
|
||||
$Excel = New-Object -TypeName OfficeOpenXml.ExcelPackage -ArgumentList $Stream
|
||||
|
||||
if ($WorksheetName) {
|
||||
$Worksheet = $Excel.Workbook.Worksheets[$WorkSheetName]
|
||||
} else {
|
||||
$Worksheet = $Excel.Workbook.Worksheets | Select-Object -First 1
|
||||
}
|
||||
|
||||
if($TableName) {
|
||||
$Table = $Worksheet.Tables[$TableName]
|
||||
} else {
|
||||
$Table = $Worksheet.Tables | Select-Object -First 1
|
||||
}
|
||||
|
||||
$rowCount = $Table.Address.Rows
|
||||
$colCount = $Table.Address.Columns
|
||||
|
||||
$digits = "0123456789".ToCharArray()
|
||||
|
||||
$start, $end=$Table.Address.Address.Split(':')
|
||||
|
||||
$pos=$start.IndexOfAny($digits)
|
||||
[int]$startCol=ConvertFrom-ExcelColumnName $start.Substring(0,$pos)
|
||||
[int]$startRow=$start.Substring($pos)
|
||||
|
||||
$propertyNames = for($col=$startCol; $col -lt ($startCol+$colCount); $col+= 1) {
|
||||
$Worksheet.Cells[$startRow, $col].value
|
||||
}
|
||||
|
||||
$startRow++
|
||||
for($row=$startRow; $row -lt ($startRow+$rowCount); $row += 1) {
|
||||
$nr=[ordered]@{}
|
||||
$c=0
|
||||
for($col=$startCol; $col -lt ($startCol+$colCount); $col+= 1) {
|
||||
$nr.($propertyNames[$c]) = $Worksheet.Cells[$row, $col].value
|
||||
$c++
|
||||
}
|
||||
[pscustomobject]$nr
|
||||
}
|
||||
|
||||
$Stream.Close()
|
||||
$Stream.Dispose()
|
||||
$Excel.Dispose()
|
||||
$Excel = $null
|
||||
}
|
||||
|
||||
function ConvertFrom-ExcelColumnName {
|
||||
param($columnName)
|
||||
|
||||
$sum=0
|
||||
$columnName.ToCharArray() |
|
||||
ForEach {
|
||||
$sum*=26
|
||||
$sum+=[char]$_.tostring().toupper()-[char]'A'+1
|
||||
}
|
||||
$sum
|
||||
}
|
||||
|
||||
cls
|
||||
|
||||
ipmo .\ImportExcel.psd1 -Force
|
||||
|
||||
#Get-ExcelTableName .\testTable.xlsx | Get-ExcelTable .\testTable.xlsx
|
||||
Get-ExcelTable .\testTable.xlsx Table3
|
||||
Reference in New Issue
Block a user