Làm cách nào để chuyển đổi HTML sang Excel bằng mã VBA?
Như ảnh chụp màn hình bên dưới được hiển thị, nếu số lượng thẻ html tồn tại trong các ô trang tính của bạn, làm cách nào bạn có thể chuyển đổi chúng thành văn bản thuần túy trong Excel? Show Chuyển đổi html thành văn bản trong các ô có chức năng Tìm và Thay thếBạn có thể chuyển đổi tất cả html thành văn bản trong ô bằng chức năng Tìm và Thay thế trong Excel. Vui lòng làm như sau 1. Chọn các ô bạn sẽ chuyển đổi tất cả html thành văn bản và nhấn phím Ctrl + F để mở hộp thoại Tìm và Thay thế 2. In the Find and Replace dialog box, go to the Replace tab, enter <*> into the Find what box, keep the Replace with box empty, and click the Replace All button. See screenshot: 3. Sau đó, hộp thoại Microsoft Excel bật lên cho bạn biết có bao nhiêu thẻ html đã được thay thế, nhấp vào nút OK và đóng hộp thoại Tìm và Thay thế Sau đó, bạn có thể thấy tất cả các thẻ html bị xóa khỏi các ô đã chọn như ảnh chụp màn hình bên dưới được hiển thị Chuyển đổi html thành văn bản trong toàn bộ trang tính bằng VBANgoài ra, bạn có thể chuyển đổi tất cả html thành văn bản trong toàn bộ trang tính cùng lúc với mã VBA bên dưới 1. Mở bảng tính chứa html bạn sẽ chuyển đổi thành văn bản, sau đó nhấn tổ hợp phím Alt + F11 để mở cửa sổ Microsoft Visual Basic for Applications 2. Trong cửa sổ Microsoft Visual Basic for Applications, nhấp vào Chèn > Mô-đun, sau đó sao chép mã VBA bên dưới vào cửa sổ Mô-đun mã VBA. Chuyển đổi html thành văn bản trong toàn bộ trang tính
3. Vẫn trong cửa sổ Microsoft Visual Basic for Applications, vui lòng nhấp vào Tools > References, kiểm tra Microsoft VBScript Regular Expression 5. 5 trong hộp thoại References-VBAProject, rồi bấm nút OK Tại sao phân tích cú pháp HTML trong Excel VBA? . Một số trường hợp đang tạo nhiều tệp HTML dựa trên dữ liệu excel, chỉnh sửa nhiều tệp HTML, loại bỏ một số dữ liệu, v.v. Tôi đang sử dụng trang chủ Hacker News cho ví dụ này, nơi chúng tôi phân tích tất cả các bài đăng từ trang chủ. Tất nhiên, Hacker News có API riêng có thể được sử dụng để lấy các chủ đề mới nhất nhưng ví dụ này chỉ để tìm hiểu cách phân tích cú pháp HTML Tại sao tin tức Hacker? Đầu ra cuối cùng trông giống như hình ảnh dưới đây Bắt đầu
Một vài điều cơ bản trước và sau đó đi sâu vào mã Định nghĩa và cài đặt HTMLĐối tượng HTML có thể được xác định bằng cách sử dụng Dim html As New HTMLDocument HTML có thể được đặt thành đối tượng này bằng cú pháp này html.body.innerHTML = htmlstring Các phương thức và thuộc tính hữu íchCó nhiều phương thức và thuộc tính của đối tượng và phần tử HTML. Bạn có thể xem tất cả các phương thức sử dụng tính năng tự động hoàn thành nhưng các phương thức hữu ích nhất là các thuộc tính như sau
bước
Hoàn thành mãHãy nhìn vào mã đầu tiên Public Sub parsehtml() Dim http As Object, html As New HTMLDocument, topics As Object, titleElem As Object, detailsElem As Object, topic As HTMLHtmlElement Dim i As Integer Set http = CreateObject("MSXML2.XMLHTTP") http.Open "GET", "https://news.ycombinator.com/", False http.send html.body.innerHTML = http.responseText Set topics = html.getElementsByClassName("athing") i = 2 For Each topic In topics Set titleElem = topic.getElementsByTagName("td")(2) Sheets(1).Cells(i, 1).Value = titleElem.getElementsByTagName("a")(0).innerText Sheets(1).Cells(i, 2).Value = titleElem.getElementsByTagName("a")(0).href Set detailsElem = topic.NextSibling.getElementsByTagName("td")(1) Sheets(1).Cells(i, 3).Value = detailsElem.getElementsByTagName("span")(0).innerText Sheets(1).Cells(i, 4).Value = detailsElem.getElementsByTagName("a")(0).innerText i = i + 1 Next End Sub Khi tôi nói chủ đề, ý tôi là bài viết Giải thích mã
kết thúcCác phần tử HTML cũng có thể được định nghĩa là Public Function getXPathElement(sXPath As String, objElement As Object) As HTMLBaseElement Dim sXPathArray() As String Dim sNodeName As String Dim sNodeNameIndex As String Dim sRestOfXPath As String Dim lNodeIndex As Long Dim lCount As Long ' Split the xpath statement sXPathArray = Split(sXPath, "/") sNodeNameIndex = sXPathArray(1) If Not InStr(sNodeNameIndex, "[") > 0 Then sNodeName = sNodeNameIndex lNodeIndex = 1 Else sXPathArray = Split(sNodeNameIndex, "[") sNodeName = sXPathArray(0) lNodeIndex = CLng(Left(sXPathArray(1), Len(sXPathArray(1)) - 1)) End If sRestOfXPath = Right(sXPath, Len(sXPath) - (Len(sNodeNameIndex) + 1)) Set getXPathElement = Nothing For lCount = 0 To objElement.ChildNodes().Length - 1 If UCase(objElement.ChildNodes().item(lCount).nodeName) = UCase(sNodeName) Then If lNodeIndex = 1 Then If sRestOfXPath = "" Then Set getXPathElement = objElement.ChildNodes().item(lCount) Else Set getXPathElement = getXPathElement(sRestOfXPath, objElement.ChildNodes().item(lCount)) End If End If lNodeIndex = lNodeIndex - 1 End If Next lCount End Function2 để tự động hoàn thành Có nhiều cách để xác định một phần tử trong HTML. Sử dụng ID, Tên lớp, Tên thẻ, v.v. XPath cũng có thể được sử dụng để xác định phần tử nhưng VBA không có hỗ trợ tích hợp cho XPath. Đây là một chức năng tùy chỉnh để xác định các phần tử bằng XPath Public Function getXPathElement(sXPath As String, objElement As Object) As HTMLBaseElement Dim sXPathArray() As String Dim sNodeName As String Dim sNodeNameIndex As String Dim sRestOfXPath As String Dim lNodeIndex As Long Dim lCount As Long ' Split the xpath statement sXPathArray = Split(sXPath, "/") sNodeNameIndex = sXPathArray(1) If Not InStr(sNodeNameIndex, "[") > 0 Then sNodeName = sNodeNameIndex lNodeIndex = 1 Else sXPathArray = Split(sNodeNameIndex, "[") sNodeName = sXPathArray(0) lNodeIndex = CLng(Left(sXPathArray(1), Len(sXPathArray(1)) - 1)) End If sRestOfXPath = Right(sXPath, Len(sXPath) - (Len(sNodeNameIndex) + 1)) Set getXPathElement = Nothing For lCount = 0 To objElement.ChildNodes().Length - 1 If UCase(objElement.ChildNodes().item(lCount).nodeName) = UCase(sNodeName) Then If lNodeIndex = 1 Then If sRestOfXPath = "" Then Set getXPathElement = objElement.ChildNodes().item(lCount) Else Set getXPathElement = getXPathElement(sRestOfXPath, objElement.ChildNodes().item(lCount)) End If End If lNodeIndex = lNodeIndex - 1 End If Next lCount End Function Nếu bạn có bất kỳ câu hỏi hoặc phản hồi nào, hãy bình luận bên dưới Nhận thông báo khi có bài đăng mới bằng cách nhấp vào Cần giúp đỡ? Để trống trường này nếu bạn là người.rajith kumar Một CA- do giáo dục, lập trình viên tự học bằng niềm đam mê, thích khám phá các công nghệ mới và tin tưởng vào việc học bằng cách làm |