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