Excel - VBA

VBA CreateObject("htmlfile")을 이용한 URL Encode 및 HTML Entity 제거

EGTools 2023. 7. 10. 19:00

RESTful API를 사용할 때에 URL에 옵션 내용을 넣어야 하는 경우 URL Encode를 해야 합니다.

Excel은 2013버전부터 내장함수로 ENCODEURL()을 지원하고 있으나, 그 이전 버전도 사용해야 하므로

아래와 같이 간단한 코드로 Encoding을 할 수 있습니다.

Function EncodeURL(Text As Variant)
    '// Application.ENCODEURL은 Excel2013부터 지원함
    Dim oHTML As Object: Set oHTML = CreateObject("htmlfile")
    oHTML.parentWindow.execScript "function encode(s) {return encodeURIComponent(s)}", "jscript"
    EncodeURL = oHTML.parentWindow.encode(Text)
    Set oHTML = Nothing
End Function

 

 

그리고, HTML 소스를 가져오면 일반문자는 그대로 있으나 HTML Entity에 해당하는 것들은 &를 &로 변경되어 있으므로 이를 다시 정상 문자열로 변환할 필요가 있습니다.

이럴 때에도 htmlfile을 생성하고 innerHTML에 HTML소스를 넣은 다음 innerText로 정상 문자열을 얻을 수 있습니다. 

Function DecodeHTML(Text As String)
    Dim oHTML As Object
    Set oHTML = CreateObject("htmlfile")
    oHTML.body.innerHTML = Text
    DecodeHTML = oHTML.body.innerText
    Set oHTML = Nothing
End Function