我使用Excel VBA和以下方法搜索html文件中的字符串,并在添加粗体标记后将其替换为相同的字符串。
FindAndReplace ("C:\xxx.htm", "hello world", "<b>hello world</b>")
Private Sub FindAndReplace(filePath As String, findWhat As String, replaceWith As String)
Dim nextFileNum As Long
Dim oldFileContents As String
Dim newFileContents As String
Dim textFileTypes() As String
Dim fileExtension As String
Dim sFileName As String
Dim iFileNum As Integer
Dim sBuf As String
Dim strFound As Integer
If Len(Dir(filePath)) = 0 Then
Exit Sub
End If
nextFileNum = FreeFile
Open filePath For Input As #nextFileNum
oldFileContents = Input$(LOF(nextFileNum), #nextFileNum)
Close #nextFileNum
newFileContents = Replace(oldFileContents, findWhat, replaceWith)
nextFileNum = FreeFile
Open filePath For Output As #nextFileNum
Print #nextFileNum, newFileContents
Close #nextFileNum
End Sub
我面临的问题是获胜的函数;如果因为html源代码换行而在它之间分裂,则找到字符串。
例如,如果代码为:
,则会找到该字符串<p>hi hola hello world</p>
但是如果代码是:
则找不到<p>hi hola hello
world</p>
我是否可以使用任何其他VBA方法来搜索和替换文本,或者可以将某些功能添加到上面的代码中,以便忽略它们之间的换行符。
答案 0 :(得分:0)
尝试使用以下变体:
Function RemoveCarriageReturns(SourceString As String) As String
Dim s As String
'strip out CR and LF characters together
s = Replace(SourceString, vbCrLf, "")
'just in case, remove them one at a time
s = Replace(s, Chr(13), "")
s = Replace(s, Chr(10), "")
RemoveCarriageReturns = s
End Function
ASCII字符13和10是回车符和换行符。
答案 1 :(得分:0)
如果拆分仅包含换行/返回(Chr(10)
,Chr(13)
)和/或空格Chr(32)
,那么您可能首先搜索“hello”。
找到时查找那些字符(10,13和32)并跳过它们直到遇到其他问题(使用DO WHILE ... OR ... OR ... OR
循环)。
现在检查是否有其他东西是“世界”并且遇到了至少一个字符。
在这种情况下,您会将"hello"
更改为"<b>hello"
,将"world"
更改为"world</b>"