Thư viện lập trình bảng tính Excel có khả năng xây dựng các ứng dụng đa nền tảng với khả năng tạo, sửa đổi, chuyển đổi, kết xuất và in các tệp MHTML. . NET Excel API không chỉ chuyển đổi giữa các định dạng bảng tính, nó còn có thể hiển thị các tệp Excel dưới dạng hình ảnh, PDF, HTML, ODS, v.v., do đó làm cho nó trở thành lựa chọn hoàn hảo để trao đổi tài liệu ở định dạng tiêu chuẩn công nghiệpThư viện lập trình bảng tính Excel có khả năng xây dựng các ứng dụng đa nền tảng với khả năng tạo, sửa đổi, chuyển đổi, kết xuất và in các tệp MHTML. Java Excel API không chỉ chuyển đổi giữa các định dạng bảng tính, nó còn có thể hiển thị các tệp Excel dưới dạng hình ảnh, PDF, HTML, ODS, v.v., do đó làm cho nó trở thành lựa chọn hoàn hảo để trao đổi tài liệu ở định dạng tiêu chuẩn công nghiệp Khả năng lưu trang Web thành định dạng MHT rất thú vị. Trước hết, bạn có thể làm tương tự trong Outlook. Nếu bạn có một email mà bạn muốn lưu, bạn có thể thực hiện Lưu dưới dạng và có thể chọn đầu ra là tệp MHT. Vì vậy, về cơ bản, bạn có tất cả vào một tệp. Điều tương tự cũng xảy ra với một trang Web. Nếu bạn lưu thường xuyên trong trình duyệt của mình, bạn sẽ nhận được rất nhiều tệp trong thư mục mới tạo có chứa hình ảnh và các tệp khác có thể cần thiết để hiển thị trang HTML. Vì vậy, lưu trang thành định dạng MHT sẽ cung cấp cho bạn mọi thứ vào một tệp Show Một kịch bản đơn giản Tôi thường nhận được yêu cầu xây dựng các ứng dụng rô bốt sẽ thực hiện nhiều quy trình trong nền. Trong một số trong số chúng, đôi khi cần truy xuất các trang HTML cụ thể từ một trang Web cụ thể. Sau đó, chúng tôi có thể lưu các trang đó vào các tệp MHT và lưu trữ chúng vào các thư mục cụ thể sẽ phục vụ cho các mục đích cụ thể trong các ứng dụng liên quan Cách tiếp cận tốt nhất mà tôi đã tìm thấy cho đến nay để làm điều này là sử dụng CDO. lớp tin nhắn. Theo kịch bản đơn giản nhất, chúng ta sẽ sử dụng phương thức CreateMHTMLBody() để truy xuất trang, nhận tham chiếu đến đối tượng phát trực tuyến của nó và lưu trang đó vào một tệp Truy xuất trang Trong bài viết này, tôi sẽ sử dụng một lớp MHTML nơi tôi sẽ cần nhập hai không gian tên, như sau Imports CDO Imports ADODBSau đó, chúng ta có thể định nghĩa lớp của mình, khởi tạo CDO. Đối tượng tin nhắn và xác định một thuộc tính cho URL của chúng tôi và một thuộc tính khác cho vị trí lưu của chúng tôi. Public Class MHTML Public cMHTMLUrl As String = "" Public cSaveFile As String = "" ' CDO message object Private oMessage As CDO.Message = New CDO.Message End ClassĐể truy xuất một trang, tôi đã tạo một phương thức gọi là GetMHTML() mà chúng ta có thể định nghĩa như thế này. ' Get the MHTML file Public Function GetMHTML() As Boolean Dim loStream As ADODB.Stream ' Go get the page oMessage.CreateMHTMLBody(cMHTMLUrl, CDO.CdoMHTMLFlags.cdoSuppressNone, "", "") loStream = oMessage.GetStream() ' Save to file loStream.SaveToFile(cSaveFile, SaveOptionsEnum.adSaveCreateOverWrite) Return True End FunctionSau đó, chúng ta có thể sử dụng một cái gì đó như thế này để sử dụng lớp này để truy xuất trang HTML. Dim loMHTML As MHTML = New MHTML() loMHTML.cMHTMLUrl = "http://www.universalthread.com" ' Save the file into a directory loMHTML.cSaveFile = "d:\test.mht" ' Call the GetMHTML() method to retrieve the HTML page and save it into cSaveFile If Not loMHTML.GetMHTML() Then MessageBox.Show("Unable to get the page") End IfLưu ý rằng trong trường hợp này, tôi chỉ đơn giản xác định thuộc tính cHTMLUrl để truy cập miền. Theo mặc định, mọi trang Web đều là trang mặc định của nó. Trong trường hợp Chủ đề chung, trang mặc định là Mặc định. aspx. Vì vậy, chúng tôi có thể đã xác định thuộc tính cHTMLUrl như thế này để cung cấp bản trình bày tốt hơn về trang mà chúng tôi đang truy xuất. loMHTML.cMHTMLUrl = "http://www.universalthread.com/Default.aspx" Truy xuất một trang yêu cầu cookie Đối với một số trang, cookie có thể được yêu cầu để truy cập trang. Trong một tình huống phổ biến, tên người dùng và mật khẩu có thể được yêu cầu để truy cập một trang cụ thể. Tuy nhiên, trong trường hợp này, tất cả điều này được thực hiện từ một ứng dụng rô-bốt. Vì vậy, không có ai ngồi sau bàn phím để truy cập trang đăng nhập để nhập tên người dùng và mật khẩu Vì vậy, chúng ta cần tìm một cơ chế để hỗ trợ điều đó. Về cơ bản, chúng ta cần biết tên cookie mà trang web đang sử dụng. Sau đó, chúng tôi cần gọi trang đăng nhập trước khi gọi trang của chúng tôi mà chúng tôi muốn truy xuất. Cuối cùng, sau khi đăng nhập xong, chúng tôi có thể liên kết cookie với CDO của mình. Đối tượng tin nhắn và đảm bảo rằng chúng tôi vượt qua nó khi chúng tôi truy xuất trang của mình Điều đầu tiên cần làm là thêm hai thuộc tính nữa ở cấp độ lớp. Một thuộc tính sẽ cho biết trang HTML sẽ sử dụng để đăng nhập của chúng tôi và một thuộc tính khác để cho biết tên cookie mà chúng tôi cần làm việc là gì Public cCookie As String = "" Public cLoginUrl As String = "" Sau đó, chúng ta cần có cách để thêm vào bộ sưu tập các biến HTML được yêu cầu để xác thực. Đây thường là tên người dùng và mật khẩu. Vì vậy, chúng ta cần xác định một thuộc tính mới làm cấp độ lớp cho bộ sưu tập của mình và tạo một phương thức sẽ thêm vào bộ sưu tập các biến HTML cần thiết để xác thực ' Collection to hold the form fields to be used when there is a login page Private oFormField As Collection = New Collection ' Add a form field for the post that can be used to do the login ' expC1 Name ' expC2 Value Public Function AddFormField(ByVal tcName As String, ByVal tcValue As String) As Boolean Dim loFormField(2) As Object loFormField(1) = tcName loFormField(2) = tcValue oFormField.Add(loFormField) End FunctionSau đó, từ ứng dụng của chúng ta, chúng ta có thể thêm các biến tên người dùng và mật khẩu như sau. loMHTML.AddFormField("Username", "MyUsername") loMHTML.AddFormField("Password", "MyPassword")Phần khó nhất trong tất cả những điều này là xây dựng phương thức Login() của chúng ta. Thành thật mà nói, tôi thấy rằng một cái khó xây dựng vì thực tế không có thông tin nào trên Internet về điều đó. Suy nghĩ duy nhất chúng tôi tìm thấy về CDO này. Lớp tin nhắn là về việc xây dựng email chứ không phải về truy xuất trang HTML đặc biệt yêu cầu cookie Tuy nhiên, sau rất nhiều R & D, tôi đã xây dựng phương thức Login() như sau ' Do the login Public Function Login() As Boolean Dim lcCookie As String = "" Dim lcPostData As String = "" Dim llSuccess As Boolean = False Dim lnCounter As Integer = 0 Dim loASCIIEncoding As System.Text.Encoding = New System.Text.ASCIIEncoding Dim loByte() As Byte Dim loCookieCollection As System.Net.CookieCollection Dim loCookieContainer As System.Net.CookieContainer = New System.Net.CookieContainer Dim loFormField(2) As Object Dim loStreamWebRequest As IO.Stream Dim loWebRequest As System.Net.HttpWebRequest Dim loWebResponse As System.Net.HttpWebResponse ' Get the post data For Each loFormField In oFormField If lcPostData.Length > 0 Then lcPostData = lcPostData + "&" End If lcPostData = lcPostData + loFormField(1) + "=" + loFormField(2) Next loByte = loASCIIEncoding.GetBytes(lcPostData) ' Prepare Web request loWebRequest = System.Net.WebRequest.Create(cLoginUrl) loWebRequest.Method = "POST" loWebRequest.ContentType = "application/x-www-form-urlencoded" loWebRequest.ContentLength = lcPostData.Length ' Send the data loStreamWebRequest = loWebRequest.GetRequestStream() loStreamWebRequest.Write(loByte, 0, loByte.Length) loStreamWebRequest.Close() loWebRequest.CookieContainer = New System.Net.CookieContainer() ' Get the cookie loWebResponse = loWebRequest.GetResponse() loCookieCollection = loWebRequest.CookieContainer.GetCookies(loWebRequest.RequestUri) For lnCounter = 0 To loCookieCollection.Count - 1 lcCookie = loCookieCollection.Item(lnCounter).Name If lcCookie = cCookie Then lcCookie = loCookieCollection.Item(lnCounter).Value ' Define the cookie oMessage.Configuration.Fields.Item(CDO.CdoConfiguration.cdoHTTPCookies).Value = _ cCookie + "=" + lcCookie oMessage.Configuration.Fields.Update() Exit For End If Next Return True End FunctionVề cơ bản, những gì phương pháp này làm là gọi trang đăng nhập để thực hiện đăng nhập của chúng tôi. Nó sử dụng bộ sưu tập mà chúng tôi đã tạo để chuyển các biến HTML đó. Điều này được thực hiện thông qua phương thức POST. Vì trang đăng nhập này sẽ thiết lập cookie, chúng tôi cần khởi tạo vùng chứa cookie để có thể nhận lại cookie. Vì trang này có thể thiết lập các cookie bổ sung, chúng tôi đảm bảo chỉ lưu trữ vào CDO. Đối tượng tin nhắn cookie được yêu cầu mà sau đó chúng tôi sẽ sử dụng để truy xuất trang HTML của mình Vì vậy, khi cần đăng nhập để truy cập một trang cụ thể, trước tiên chúng tôi gọi trang đăng nhập và sau đó là trang HTML mà chúng tôi muốn truy xuất nội dung của nó Dim loMHTML As MHTML = New MHTML() loMHTML.AddFormField("Username", "MyUsername") loMHTML.AddFormField("Password", "MyPassword") loMHTML.cLoginUrl = "http://www.mywebsite.com/Login.aspx" loMHTML.cCookie = "TheCookieContainingWhatIsNeededToAccessThePage" If Not loMHTML.Login() Then MessageBox.Show("Unable to log in") Exit Sub End If ' The URL to be returned as MHTML loMHTML.cMHTMLUrl = "http://www.mywebsite.com/Account.aspx" ' Save the file into a directory loMHTML.cSaveFile = "d:\test.mht" ' Save to file If Not loMHTML.GetMHTML() Then MessageBox.Show("Unable to get the page") Exit Sub End If Thông tin thêm về việc nâng cao lớp học này Lớp này có thể dễ dàng được tăng cường để hỗ trợ xác thực cơ bản. Vì vậy, đối với các trang HTML yêu cầu xác thực cơ bản, chúng ta có thể dễ dàng điều chỉnh lớp của mình để hỗ trợ nhu cầu đó Trước tiên, chúng tôi tạo hai thuộc tính bổ sung sẽ được sử dụng để lưu trữ tên người dùng và mật khẩu sẽ được sử dụng. Chúng tôi định nghĩa chúng như sau Public Class MHTML Public cMHTMLUrl As String = "" Public cSaveFile As String = "" ' CDO message object Private oMessage As CDO.Message = New CDO.Message End Class0Sau đó, chúng ta có thể điều chỉnh phương thức GetMHTML() như sau. Public Class MHTML Public cMHTMLUrl As String = "" Public cSaveFile As String = "" ' CDO message object Private oMessage As CDO.Message = New CDO.Message End Class1Về cơ bản, cách tiếp cận cookie này dễ xử lý hơn nhiều Phần kết luận Như bạn có thể thấy, điều này khá đơn giản. Như tôi đã nói, cách tiếp cận cookie là phần phức tạp nhất trong tất cả những điều này. Nhưng, một khi nó được thực hiện, bạn sẽ không phải lo lắng về nó vì nó được gói gọn trong lớp. Tuy nhiên, tôi vẫn ngạc nhiên khi thấy rằng không có quá nhiều nhà phát triển đã sử dụng CDO. Lớp thông báo như thế này, để truy xuất trang HTML yêu cầu cookie Tệp MHTML là gì?MHTML, viết tắt của "sự đóng gói MIME của các tài liệu HTML tổng hợp", là một định dạng tệp lưu trữ Web được sử dụng để kết hợp, trong một tệp máy tính, mã HTML và các tài nguyên đi kèm của nó (chẳng hạn như hình ảnh, hoạt ảnh Flash, ứng dụng Java và âm thanh
Ứng dụng nào tốt nhất cho tệp MHTML?Trình xem ô trong Excel . Đây là một ứng dụng miễn phí có thể xem các tệp Excel trực tuyến từ Windows, Mac OS, Linux, Android, iOS và mọi nơi.
MHTML có giống như HTML không?MHTML là tên viết tắt của MIME HTML , là định dạng tệp lưu trữ kết hợp các trang web và tất cả tài nguyên của chúng. Theo mặc định, hầu hết các trình duyệt web đều lưu các trang web dưới dạng nhiều tệp, thường là tệp ngôn ngữ đánh dấu siêu văn bản (HTML) và các thư mục tài nguyên liên quan, có thể bao gồm hình ảnh, nhạc hoặc dữ liệu khác.
Sự khác biệt giữa MHT và MHTML là gì?MHTML là một khởi tạo của "sự đóng gói MIME của các tài liệu HTML tổng hợp. " Nhưng MHT là viết tắt của một số thuật ngữ khác không liên quan gì đến tài liệu HTML, bao gồm cây băm Merkle và công nghệ trung bình và cao |