gpt4 book ai didi

powershell - Powershell:属性存储在变量中

转载 作者:行者123 更新时间:2023-12-02 23:23:05 25 4
gpt4 key购买 nike

我想使用EPPlus根据属性值查找范围内的所有单元格。假设我需要在现有电子表格中找到所有带有粗体文本的单元格。我需要创建一个将接受可配置属性参数的函数,但是我无法使用存储在变量中的属性:

$cellobject = $ws.cells[1,1,10,10]
$properties = 'Style.Font.Bold'

$cellobject.$properties
$cellobject.{$properties}
$cellobject.($properties)
$cellobject."$properties"

这些都不起作用,不会导致 call 深度溢出。

如果这种方法行不通,那么库中是否可以使用某些东西?

编辑:为了显示最终解决方案,我使用HanShotFirst提供的概念更新了该功能。
function Get-CellObject($ExcelSheet,[string]$PropertyString,[regex]$Value){

#First you have to get the last row with text,
#solution for that is not provided here...
$Row = Get-LastUsedRow -ExcelSheet $ExcelSheet -Dimension $true

while($Row -gt 0){
$range = $ExcelSheet.Cells[$Row, 1, $Row, $ExcelSheet.Dimension.End.Column]

foreach($cellObject in $range){

if($PropertyString -like '*.*'){
$PropertyArr = $PropertyString.Split('.')
$thisObject = $cellObject

foreach($Property in $PropertyArr){
$thisObject = $thisObject.$Property

if($thisObject -match $Value){
$cellObject
}
}
}
else{
if($cellObject.$PropertyString -match $Value){
$cellObject
}
}
}
$Row--
}
}
#The ExcelSheet parameter takes a worksheet object
Get-CellObject -ExcelSheet $ws -Property 'Style.Font.Bold' -Value 'True'

最佳答案

点进入属性并不真正适用于字符串。您需要分离属性的层。这是具有三层属性的对象的示例。

# create object
$props = @{
first = @{
second = @{
third = 'test'
}
}
}
$obj = New-Object -TypeName psobject -Property $props

# outputs "test"
$obj.first.second.third

# does not work
$obj.'first.second.third'

# outputs "test"
$a = 'first'
$b = 'second'
$c = 'third'
$obj.$a.$b.$c

在您的示例中,将是这样的:
$cellobject = $ws.cells[1,1,10,10]
$p1 = 'Style'
$p2 = 'Font'
$p3 = 'Bold'

$cellobject.$p1.$p2.$p3

或者,您可以将其动态化。这应该产生相同的结果:
$cellobject = $ws.cells[1,1,10,10]    
$props = 'Style.Font.Bold'.Split('.')
$result = $cellobject
foreach ($prop in $props) {
$result = $result.$prop
}
$result

从星期五开始,这里是一个函数:)
function GetValue {
param (
[psobject]$InputObject,
[string]$PropertyString
)

if ($PropertyString -like '*.*') {
$props = $PropertyString.Split('.')
$result = $InputObject
foreach ($prop in $props) {
$result = $result.$prop
}
} else {
$result = $InputObject.$PropertyString
}

$result
}

# then call the function
GetValue -InputObject $cellobject -PropertyString 'Style.Font.Bold'

关于powershell - Powershell:属性存储在变量中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44205037/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com