0

我正在使用 VBScript 从 Nagios XI 中提取 LOG 文件。我已经自动化了一个将使用 IE.Aplication 的脚本navigate,选择正确的参数(过滤)并导出为 CSV(Excel 可用)。那已经完成了!

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

Sub CellColor(rng As Range)
  For Each row In rng.Rows
    For Each cell In row.Cells
      If cell.Value = ActiveCell.Value Then  '--- The Condition of the function
        cell.Style = "Bad"                   '--- Changing the "Style" atribbute
      Else
        cell.Style = "Good"                  '--- Changing the "Style" atribbute
      End If
    Next cell
  Next row
End Sub

任何机构都可以建议如何转换它吗?

4

1 回答 1

0

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

然而,由于Range对象也有一个Cells属性,循环可以简化为:

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而不是 just ActiveCell.Value,因为在 VBScript 中没有隐式使用Application对象(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 中删除这些行:

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
于 2013-06-02T13:23:31.603 回答