1

我有一个代码,它生成了一个 HTML 格式的表格并尝试将其放入剪贴板。

我的问题是,有时会丢失数据的结尾或粘贴数据的格式。

如果我htmlStructureStr在放入剪贴板之前将变量写入调试窗口,它看起来不错,所有数据都在字符串中。

我想字节计数有问题,但我找不到解决方案。

这是我的函数(输入变量tableContent是一个 html 表格字符串。):

Public Function TableStringToClipboard(ByVal tableContent As String) As Boolean
        Dim htmlStructure As New StringBuilder

#Region "--raw structure of the clipboard data"
        htmlStructure.AppendLine("Version:1.0")
        htmlStructure.AppendLine("StartHTML:0000000001")
        htmlStructure.AppendLine("EndHTML:0000000004")
        htmlStructure.AppendLine("StartFragment:0000000002")
        htmlStructure.AppendLine("EndFragment:0000000003")
        htmlStructure.AppendLine("<html>")
        htmlStructure.AppendLine("<head>")
        htmlStructure.AppendLine("<style>#styleCss#</style>")
        htmlStructure.AppendLine("</head>")
        htmlStructure.AppendLine("<body>")

        htmlStructure.AppendLine("<table cellspacing=0>")
        htmlStructure.AppendLine("<!--StartFragment-->")
        htmlStructure.AppendLine("#tableHtml#")
        htmlStructure.AppendLine("<!--EndFragment-->")
        htmlStructure.AppendLine("</table>")

        htmlStructure.AppendLine("</body>")
        htmlStructure.AppendLine("</html>")
#End Region

#Region "--CSS format definition"

        Dim styleCss As String = ""

            styleCss = " 
            table {border-collapse: collapse;} 
            tr {color:black;
                font-size:11.0pt;
                font-weight: normal;
                font-style:normal;
                text-decoration:none;
                font-family:Calibri, sans-serif;}
            col {mso-width-source:auto;}
            br {mso-data-placement:same-cell;}
            .head
                {padding:2px;
                color:black;
                font-size:11.0pt;
                font-weight:900;
                font-style:normal;
                text-decoration:none;
                font-family:Calibri, sans-serif;

                text-align:left;
                border:.5pt solid #000000;
                white-space:nowrap;
                vertical-align:middle;
                background-color: PowderBlue;
        }
            td
                {padding:2px;
                text-align:general;
                border:.5pt solid #000000;
                white-space:nowrap;
                vertical-align:middle;}"

        htmlStructure.Replace("#styleCss#", styleCss)
#End Region

htmlStructure.Replace("#tableHtml#", tableContent.ToString)

#Region "----ByteCounting"

        Dim byteCounter As System.Text.ASCIIEncoding = System.Text.Encoding.ASCII

        Dim value As Integer
        Dim htmlStructureStr As String = htmlStructure.ToString

        value = byteCounter.GetByteCount(Left(htmlStructureStr, htmlStructureStr.IndexOf("<html")))
        htmlStructureStr = htmlStructureStr.Replace("0000000001", value.ToString("D10"))

        value = byteCounter.GetByteCount(Left(htmlStructureStr, htmlStructureStr.IndexOf("<!--StartFragment-->")))
        htmlStructureStr = htmlStructureStr.Replace("0000000002", value.ToString("D10"))

        value = byteCounter.GetByteCount(Left(htmlStructureStr, htmlStructureStr.IndexOf("<!--EndFragment-->")))
        htmlStructureStr = htmlStructureStr.Replace("0000000003", value.ToString("D10"))

        value = byteCounter.GetByteCount(Left(htmlStructureStr, htmlStructureStr.IndexOf("</html>")))
        htmlStructureStr = htmlStructureStr.Replace("0000000004", value.ToString("D10"))
#End Region

        '----put data to clipboard

        My.Computer.Clipboard.SetText(htmlStructureStr, TextDataFormat.Html)

        Return True

    End Function
4

1 回答 1

0

MSDN说,

剪贴板支持的唯一字符集是 UTF-8 编码中的 Unicode。因为 UTF-8 和 ASCII 的第一个字符匹配,所以描述总是 ASCII,但上下文的字节(从 StartHTML 开始)可以使用以 UTF-8 编码的任何其他字符。

使用 UTF8 编码如下

Dim byteCounter As System.Text.UTF8Encoding = System.Text.Encoding.UTF8
于 2017-02-16T11:50:17.903 回答