Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel PowerShell从单元格值解析数据_Excel_Powershell_Split - Fatal编程技术网

Excel PowerShell从单元格值解析数据

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

我有一个电子表格,它是一个系统的输出文件,它包含一列单元格,单元格中有多个项目,用分号分隔。它可以是这样的:

单元格B4=“第1组;Jackson,Mike J;第3组;第4组

我需要从单元格中提取用户的显示名(“Jackson,Mike J.”)。数据可以是任意顺序,也可以是多个项目,也可以只是一个项目。单元数据可以类似于“Smith,Tom U.”或“组3;组4;组5;组6;Smith,Tom U.”。 我可以找到分隔符,但似乎无法将用户的显示名称从列值中分离出来

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