我正在尝试使用比较来查找Excel电子表格中的行,并在日期与今天日期相同时修改它,并且域与输入的域相同。
我似乎无法找到一篇文章来帮助我找到如何定位细胞以进行比较。一旦匹配该行,我将附加一些单元格。 我的excel看起来像这样:
Domain, Succeeded, Failed, As Of
ABC, 245, 12, 5/9/2012
NET, 7778, 25, 8/3/2013
ABC, 454, 44, 5/9/2016
NET, 54,90, 5/9/2016
所以我的代码会提示输入域名。用户将进入ABC。代码看到匹配ABC和5/9/2016的行,并添加成功的数量以及如何失败到该行中的相应列。我可以获得添加部分,我只需要帮助找出如何解析excel文件。
我最终会将此代码作为人工错误证明,但目的是获取帮助解析。这就是我所拥有的。
$excelfilepath = 'file\test.xlsx'
$Excel = New-Object -ComObject Excel.Application
$ExcelWorkBook = $Excel.Workbooks.Open($excelfilepath)
$ExcelWorkSheet = $Excel.WorkSheets.item("sheet1")
$ExcelWorkSheet.activate()
$Domain= Read-Host "What is the Domain Name"
$succeeded = Read-Host "How many succeeded"
$failed = Read-Host "How many failed"
$todaysdate = Get-Date
$todaysdate= [DateTime]::Parse($todaysdate).ToString("MM/dd/yyyy")
$lastRow = $ExcelWorkSheet.UsedRange.rows.count
$row = $ExcelWorkSheet.UsedRange.Rows | where {$_.Value2 -eq $Domain} | select Value2
我得到了
Value2,
-------
{ABC, 245, 12, SomeDecimal...}
{ABC, 454, 44, 42499...}
修改(也许??)
$Row = $ExcelWorkSheet.UsedRange.Rows | where {$_.Cells.Item(1).Value2 -eq $Enviornment -and $_.Cells.Item(4).value2 -eq $todaysdate}
$Row.Cells.Item(2).value2 = $succeeded + $Row.Cells.Item(2).value2
答案 0 :(得分:1)
您将要在此处指定要比较的单元格。类似的东西:
$row = $ExcelWorkSheet.UsedRange.Rows | where {$_.Cells.Item(1).Value2 -eq $Domain -and $_.Cells.Item(4).value2 -eq $todaysdate}
将该行作为Range对象获取。然后修改所需行中的单元格:
$Row.Cells.Item(2).value2 = $succeeded + $Row.Cells.Item(2).value2
修改:语句细分。当然,我们可以解决这个问题。这就是声明:
where {$_.Cells.Item(1).Value2 -eq $Domain -and $_.Cells.Item(4).value2 -eq $todaysdate}
我认为混淆来自$_.Cells.Item(1).Value2
。这样做是为了查看UsedRange中的所有行,并且对于每一行,它查看该行中的单元格,并且在这些单元格中,它指定第一个项目(即A列中的单元格)。然后检查该单元格中的值是否与$Domain
匹配。如果是,它将移动到Where
语句的下一部分,其中它指定行中的第4个单元格(列D中的单元格),并检查该单元格的值是否匹配{{ 1}}。
您的修改...您已在$todaysdate
方法中指定了两个参数,我认为它不需要两个参数。您可以按照我的指定尝试代码,然后让我知道如果您使用它时出错,或者它是否没有按照您的要求进行操作?