首页 > 解决方案 > 尝试使用powershell计算在两个不同列中具有特定文本的excel中的行数

问题描述

我刚开始学习powershell,我正在尝试自动化一个excel报告来提取一些重要信息。让我的生活更轻松。

此报告中有 3 种可能的状态 (n,l,m) 和 3 种可能的 desc (i,j,k)

我有一张这样的桌子:

|name  | number | state | desc|
| ---- | ------ |-------|-----|
|a     |  1     |  n    |   i |
|b     |  2     |  n    |   j |
|c     |  3     |  l    |   j |
|d     |  4     |  m    |   k |

我希望能够计算在第 3 列和第 4 列中具有这些组合的行数:(n,i),(l,i),(nj),(l,j)

这是我到目前为止所做的,但我尝试了很多没有用的东西。

$excel = New-Object -ComObject excel.application
$excel.visible = $false
$filepath = "C:\file path"
$WB = $excel.workbooks.open($filepath)
$MN = $WB.worksheets.item("sheet3")
$MN.activate()
$x= @("n","l","m")
$y=@("i","j")
$z=$MN.UsedRange
$count=0
foreach ($z in ($x -and $y)) { ++$count
$rowcount=$count}
write-host "Row count:" $rowcount

它给出的输出为 1,并且在工作表中它超过 1。请帮忙

================================================== 去从 Owlsleeping 解决方案中,我正在尝试过滤日期,如下所示:

$Content = Import-Csv -Path "C:\file.csv"

$StateFilter = @("n", "l")
$DescFilter = @("i", "j")
$startdate = Get-date -Year 2020 -Month 10 -Day 1 -Hour 00 -Minute 00 -Second 00
$enddate = Get-date -Year 2020 -Month 10 -Day 31 -Hour 23 -Minute 59 -Second 59

($Content | Where-Object {$_.State -in $StateFilter -and $_.Desc -in $DescFilter -and $_.Created -le $enddate -and $_.Created -ge $startdate }).Count

这并没有返回 10 月 1 日至 31 日之间创建的记录的准确计数。请帮助

标签: excelpowershell

解决方案


这是csv输入的解决方案。

$Content = Import-Csv -Path "C:\file.csv"

$StateFilter = @("n", "l")
$DescFilter = @("i", "j")

($Content | Where-Object {$_.State -in $StateFilter -and $_.Desc -in $DescFilter}).Count

推荐阅读