1. 程式人生 > >把資料以HTML格式存放到剪下板,並以html格式貼上到word文件

把資料以HTML格式存放到剪下板,並以html格式貼上到word文件

最近遇到一個問題:

要求把html程式碼如(“<input value=value>”)html格式貼上到word(即貼上到word中後並不是文字,而是一個html文字框)

找了好久資料,終於解決.

首先請看html格式的資料在剪下版中的存放格式:

Version:0.9//Version number of the clipboard. Starting version is 0.9.

StartHTML:71//Byte count from the beginning of the clipboard to the start of the context, or -1 if no context

EndHTML:170// Byte count from the beginning of the clipboard to the end of the context, or -1 if no context.

StartFragment:140  // Byte count from the beginning of the clipboard to the start of the fragment.

EndFragment:160   // Byte count from the beginning of the clipboard to the end of the fragment.

StartSelection:140  //

Byte count from the beginning of the clipboard to the start of the selection.

EndSelection:160   // Byte count from the beginning of the clipboard to the end of the selection.

<!DOCTYPE>

<HTML>

<HEAD>

<TITLE>The HTML Clipboard</TITLE>

<BASE HREF="http://sample/specs">

</HEAD>

<BODY>

<!--StartFragment -->

<P>The Fragment</P>

<!--EndFragment -->

</BODY>

</HTML>

其中包含了換行符號.知道了html格式的資料在剪下版中的儲存格式後,我們就可以解決這個問題了.首先我們要建立這樣一段被格式化的字串.下面的函式的功能是,接受要貼上到word中的字串引數如(“<input value=value>”)返回格式化後的html程式碼.

htmlCode = getHtmlCode(fragmentcode)

Private Function getHtmlCode(ByVal htmlCode As String) As String

Dim htmlCodeLen As Integer = htmlCode.Length

其中113為要貼上的html程式碼的起始位元組位置+要貼上的html程式碼的位元組長度=要貼上的html程式碼的結束位置

End Function

Dim htmlcodeformate AsString = String.Format("{0:d12}", endfragment)

Dim clipboardStr AsString = "Version:0.9" + vbCr + _

"StartHTML:50" + vbCr + _

"EndHTML:60" + vbCr + _

"StartFragment:000000000113" + vbCr + _

"EndFragment:" + htmlcodeformate + vbCr + _

"<!DOCTYPE>" + vbCr + _

"<HTML>" + vbCr + _

"<BODY>" + vbCr + _

htmlCode + vbCr + _

"</BODY>" + vbCr + _

"</HTML>" + vbCr

getHtmlCode = clipboardStr

下面使用這個方法獲取格式化的html字串,並複製到剪下板,然後貼上到word.

需要新增引用: Microsoft   Word   11.0   Object   Library元件

在應用程式的頭部新增:Imports Microsoft.Office.Interop.Word

Dim datobj As New System.Windows.Forms.DataObject

Dim wordappl As New Microsoft.Office.Interop.Word.Application

Dim htmlCode As String

Dim fragmentcode As String = "<input name=test value=test>”

datobj.SetData(System.Windows.Forms.DataFormats.Html, htmlCode)

"把資料複製到剪下板

System.Windows.Forms.Clipboard.SetDataObject(datobj, True)

wordappl.Selection.PasteSpecial(DataType:=10)

但是如果資料中包含了中文,如一個表格的資料中有中文的部分就會出現亂碼.需要首先把上面fragmentcode轉換為utf-8的編碼格式.

使用下面的方法:

Private Function encodingUTF8(ByVal code As String) As String

Dim encorderGB2312 As Encoding = Encoding.GetEncoding("gb2312")

Dim encorderUTF8 As Encoding = Encoding.UTF8

Dim codebytes As Byte() = encorderUTF8.GetBytes(code)

encodingUTF8 = encorderGB2312.GetString(codebytes)

End Function

這樣這個問題就解決了.

我也學得不太好,有錯誤或問題請留言.