把資料以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 //
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
這樣這個問題就解決了.
我也學得不太好,有錯誤或問題請留言.