我正在使用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
任何人都可以建议如何转换它吗?
答案 0 :(得分:0)
可以使用相应的COM对象通过VBScript自动执行Excel:
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
而不仅仅是ActiveCell.Value
,因为在VBScript中没有隐式使用Application
对象({{ VBA中的1}}是ActiveCell.Value
)的缩写。
有关VBScript与VBA之间差异的详细信息,请参阅here。
上面代码中的范围只是一个例子。如果要处理工作表中的整个使用范围,请将其替换为
Application.ActiveCell.Value
如果任何单元格包含单词“CPU”,则删除行可以执行以下操作:
Set rng = ws.UsedRange
在Excel中打开行之前,您也可以从CSV中删除这些行:
For Each cell In rng.Cells
If InStr(cell.Value, "CPU") > 0 Then cell.EntireRow.Delete
Next
批处理文件可能是实现此目的的更简单方法:
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