使用VBScript自动化Excel以处理Nagios日志 < >我使用VBScript从NigiOS席中提取日志文件。我已经自动化了一个脚本,它将使用IE。应用导航,选择正确的参数(进行筛选)并导出为CSV(Excel可用)。已经完成了
现在我想过滤更多(Nagios不能做的事情)。我有多个CPU日志,我想删除所有包含这个单词的行。我在VBA中发现了很多脚本,但我的问题是每次使用时都会覆盖文件,这就是我使用的VBA脚本(在另一个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
任何机构都可以建议如何转换此文件吗?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