0

Nagios XI からログ ファイルを抽出するために VBScript を使用しています。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 は、それぞれの COM オブジェクトを使用して VBScript で自動化できます。

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

どちらの方法でも、単に の代わりに使用する必要があることに注意してください。これは、VBScript ではオブジェクトを暗黙的に使用しないためです ( VBA では の略です)。xl.ActiveCell.ValueActiveCell.ValueApplicationActiveCell.ValueApplication.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 に答える