【问题标题】:filter for and delete rows in excel using powershell使用powershell过滤和删除excel中的行
【发布时间】:2019-03-30 11:14:12
【问题描述】:

我对 powershell 还是很陌生,觉得这可能是一个简单的问题,但我被困在我的程序中,试图过滤我的 excel 电子表格,然后删除过滤后的行。

理想情况下,我想过滤从第 3 行开始的 A 列中所有不显示“NO DATA”的行。 一旦我拥有所有这些行,我想将它们全部删除。 然后带回所有“NO DATA”的行

我想不通的是如何编写脚本以使过滤器从第 2 行开始,以及如何过滤所有不显示“NO DATA”的行

$worksheet.usedrange.autofilter(1, -ne "NO DATA", 3)
$worksheet.usedrange.offset(1,0).specialcells(12).Entirerow.Delete() 
$worksheet.ShowAllData()

当我尝试对我来说似乎合乎逻辑的事情时,我得到了 2 个错误,一个是在 -ne 之前的“缺少表达式”,另一个是“无法获取范围类的自动过滤器属性”指(Column#, Text, Row#) 部分。

$worksheet.usedrange.autofilter(1, "NO DATA", 2)
$worksheet.usedrange.offset(1,0).specialcells(12).Entirerow.Delete() 
$worksheet.ShowAllData()

此代码有效,但给了我错误的数据集(我留下了我想要删除的所有内容,它仍然从第 1 行而不是第 2 行过滤。

任何帮助都会很棒。

【问题讨论】:

  • 这对你来说可能不可行......但你有没有想过要导出到 CSV 并使用它? PoSh 可以直接、简单、快速处理 CSV 文件。 [咧嘴]
  • 谢谢,我已经调查过了,但我的 CSV 知识甚至比我的 Excel/powershell 知识还要糟糕,而且我有 320 行代码使用 powershell 到 Excel,我无法再继续。我能够找到一个可用的解决方案来解决这个问题
  • 随心所欲! [grin] 但是,如果您的数据是 2d 的,那么 CSV 格式的文件更容易使用 - 而且几乎总是更快。

标签: excel powershell powershell-3.0


【解决方案1】:

如果我理解正确,您正在寻找这个:

$StartRow = 3
$RowCnt = $worksheet.UsedRange.Rows.Count
$worksheet.Range("A$($StartRow):A$($RowCnt)").AutoFilter(1,"<>NO DATA")
$worksheet.usedrange.offset($StartRow,0).specialcells(12).Entirerow.Delete() 
$worksheet.ShowAllData()

【讨论】:

  • 我找到了解决方案,但是是的。这基本上就是解决方案:)
【解决方案2】:

能够找到解决方案,它实际上和我预期的一样简单:/

$SubCon_Vs_NOA.range("A2").autofilter(1,"<>NO DATA")
$SubCon_Vs_NOA.range("A3:A$rows").Entirerow.Delete() 
$SubCon_Vs_NOA.ShowAllData()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多