使用VBScript自动化Excel以处理Nagios日志 < >我使用VBScript从NigiOS席中提取日志文件。我已经自动化了一个脚本,它将使用IE。应用导航,选择正确的参数(进行筛选)并导出为CSV(Excel可用)。已经完成了

使用VBScript自动化Excel以处理Nagios日志 < >我使用VBScript从NigiOS席中提取日志文件。我已经自动化了一个脚本,它将使用IE。应用导航,选择正确的参数(进行筛选)并导出为CSV(Excel可用)。已经完成了,excel,vbscript,vba,Excel,Vbscript,Vba,现在我想过滤更多(Nagios不能做的事情)。我有多个CPU日志,我想删除所有包含这个单词的行。我在VBA中发现了很多脚本,但我的问题是每次使用时都会覆盖文件,这就是我使用的VBA脚本(在另一个Excel中)。我需要将其更改为从应用程序的“外部”工作(从主脚本的意思) 任何机构都可以建议如何转换此文件吗?Excel可以通过VBScript使用相应的COM对象进行自动转换: Set xl = CreateObject("Excel.Application") xl.Visible = True

现在我想过滤更多(Nagios不能做的事情)。我有多个CPU日志,我想删除所有包含这个单词的行。我在VBA中发现了很多脚本,但我的问题是每次使用时都会覆盖文件,这就是我使用的VBA脚本(在另一个Excel中)。我需要将其更改为从应用程序的“外部”工作(从主脚本的意思)


任何机构都可以建议如何转换此文件吗?

Excel可以通过VBScript使用相应的COM对象进行自动转换:

Set xl = CreateObject("Excel.Application")
xl.Visible = True

Set wb = xl.Workbooks.Open("C:\path\to\your.xls")
Set ws = wb.Sheets(1)

Set rng = ws.Range("B3:E5")

For Each row In rng
  For Each cell In row.Cells
    If cell.Value = xl.ActiveCell.Value
      cell.Style = "Bad"
    Else
      cell.Style = "Good"
    End If
  Next
Next

wb.Save
wb.Close

xl.Quit
但是,由于
范围
对象也具有
单元格
属性,因此循环可以简化为:

For Each row In rng.Cells
  If cell.Value = xl.ActiveCell.Value
    cell.Style = "Bad"
  Else
    cell.Style = "Good"
  End If
Next
请注意,无论采用哪种方式,都必须使用
xl.ActiveCell.Value
,而不仅仅是
ActiveCell.Value
,因为在VBScript中没有隐式使用
应用程序
对象(
ActiveCell.Value
在VBA中是
Application.ActiveCell.Value

有关VBScript和VBA之间差异的更多信息,请参见

上面代码中的范围只是一个示例。如果要在图纸中处理整个使用范围,请将其替换为

Set rng = ws.UsedRange
要删除行,如果任何单元格包含单词“CPU”,可以执行以下操作:

For Each cell In rng.Cells
  If InStr(cell.Value, "CPU") > 0 Then cell.EntireRow.Delete
Next
在Excel中打开CSV之前,也可以删除CSV中的行:

Set fso = CreateObject("Scripting.FileSystemObject")

filename = "C:\path\to\your.csv"

Set inFile  = fso.OpenTextFile(filename)
Set outFile = fso.OpenTextFile(filename & ".tmp", 2)

Do Until inFile.AtEndOfTextStream
  line = inFile.ReadLine
  if InStr(line, "CPU") = 0 Then outFile.WriteLine line
Loop

inFile.Close
outFile.Close

fso.DeleteFile filename, True
fso.MoveFile filename & ".tmp", filename
批处理文件可能是实现这一点的更简单的方法,但是:

findstr /v "CPU" your.csv >your.csv.tmp
del your.csv
ren your.csv.tmp your.csv

这太棒了!!!但是,如果一个单元格包含CPU字,我该怎么删除整行呢?我知道它与InSRT有关,但我真的不知道如何植入它。我在这里找到了这个示例“if InStr(1,ThisWorkbook.ActiveSheet.Cells(I,1).Text,“CPU”,vbTextCompare)>0 Then”和“ThisWorkbook.ActiveSheet.Cells(I,1).EntireRow.Delete'我没有一个预定义的范围,它可以是10行,也可以是110行,所以我希望它能通过所有填充的行,谢谢!!!请参阅更新的答案。请只接受一个答案,如果它确实解决了你的问题。
findstr /v "CPU" your.csv >your.csv.tmp
del your.csv
ren your.csv.tmp your.csv