Excel PowerShell从单元格值解析数据
我有一个电子表格,它是一个系统的输出文件,它包含一列单元格,单元格中有多个项目,用分号分隔。它可以是这样的: 单元格B4=“第1组;Jackson,Mike J;第3组;第4组” 我需要从单元格中提取用户的显示名(“Jackson,Mike J.”)。数据可以是任意顺序,也可以是多个项目,也可以只是一个项目。单元数据可以类似于“Smith,Tom U.”或“组3;组4;组5;组6;Smith,Tom U.”。 我可以找到分隔符,但似乎无法将用户的显示名称从列值中分离出来Excel PowerShell从单元格值解析数据,excel,powershell,split,Excel,Powershell,Split,我有一个电子表格,它是一个系统的输出文件,它包含一列单元格,单元格中有多个项目,用分号分隔。它可以是这样的: 单元格B4=“第1组;Jackson,Mike J;第3组;第4组” 我需要从单元格中提取用户的显示名(“Jackson,Mike J.”)。数据可以是任意顺序,也可以是多个项目,也可以只是一个项目。单元数据可以类似于“Smith,Tom U.”或“组3;组4;组5;组6;Smith,Tom U.”。 我可以找到分隔符,但似乎无法将用户的显示名称从列值中分离出来 Function Sea
Function Search-Excel {
[cmdletbinding()]
Param (
[parameter(Mandatory)]
[ValidateScript({
Try {
If (Test-Path -Path $_) {$True}
Else {Throw "$($_) is not a valid path!"}
}
Catch {
Throw $_
}
})]
[string]$Source,
[parameter(Mandatory)]
[string]$SearchText
#You can specify wildcard characters (*, ?)
)
$Excel = New-Object -ComObject Excel.Application
Try {
$Source = Convert-Path $Source
}
Catch {
Write-Warning "Unable locate full path of $($Source)"
BREAK
}
$Workbook = $Excel.Workbooks.Open($Source)
ForEach ($Worksheet in @($Workbook.Sheets)) {
# Find Method https://msdn.microsoft.com/en-us/vba/excel-vba/articles/range-find-method-excel
$Found = $WorkSheet.Cells.Find($SearchText) #What
If ($Found) {
# Address Method https://msdn.microsoft.com/en-us/vba/excel-vba/articles/range-address-property-excel
$BeginAddress = $Found.Address(0,0,1,1)
#Initial Found Cell
$NameOnly = $Found.text.split(';')
Write-Host $NameOnly
[pscustomobject]@{
WorkSheet = $Worksheet.Name
Column = $Found.Column
Row =$Found.Row
#Text = $Found.Text
Text = $NameOnly[0]
Address = $BeginAddress
}
Do {
$Found = $WorkSheet.Cells.FindNext($Found)
$Address = $Found.Address(0,0,1,1)
If ($Address -eq $BeginAddress) {
BREAK
}
[pscustomobject]@{
WorkSheet = $Worksheet.Name
Column = $Found.Column
Row =$Found.Row
#Text = $Found.Text
Text = $NameOnly[0]
Address = $Address
}
} Until ($False)
}
Else {
Write-Warning "[$($WorkSheet.Name)] Nothing Found!"
}
}
$workbook.close($false)
[void][System.Runtime.InteropServices.Marshal]::ReleaseComObject([System.__ComObject]$excel)
[gc]::Collect()
[gc]::WaitForPendingFinalizers()
Remove-Variable excel -ErrorAction SilentlyContinue
}
$Source = 'C:\Scripts\PS\Excel\MOCK_DATA_Users_Email_Gender_IP_Address.xlsx'
$SearchText = ","
$Delimiter = ";"
$NameOnly = $null
Search-Excel -Source $Source -SearchText $SearchText | Format-Table