VB.Net 生成 html table 到剪贴板
VB.Net generated html table to clipboard
我有一个代码,生成 HTML 格式的 table 并尝试放入剪贴板。
我的问题是,有时缺少数据的结尾或粘贴数据的格式。
如果我在放入剪贴板之前将 htmlStructureStr
变量写入调试 window,看起来不错,所有数据都在字符串中。
我猜字节计数有问题,但我找不到解决方案。
这是我的函数(输入变量tableContent
是一个htmltable字符串。):
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
MSDN 表示,
The only character set supported by the clipboard is Unicode in its UTF-8 encoding. Because the first characters of UTF-8 and ASCII match, the description is always ASCII, but the bytes of the context (starting at StartHTML) could be using any other characters coded in UTF-8.
使用UTF8编码如下
Dim byteCounter As System.Text.UTF8Encoding = System.Text.Encoding.UTF8
我有一个代码,生成 HTML 格式的 table 并尝试放入剪贴板。
我的问题是,有时缺少数据的结尾或粘贴数据的格式。
如果我在放入剪贴板之前将 htmlStructureStr
变量写入调试 window,看起来不错,所有数据都在字符串中。
我猜字节计数有问题,但我找不到解决方案。
这是我的函数(输入变量tableContent
是一个htmltable字符串。):
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
MSDN 表示,
The only character set supported by the clipboard is Unicode in its UTF-8 encoding. Because the first characters of UTF-8 and ASCII match, the description is always ASCII, but the bytes of the context (starting at StartHTML) could be using any other characters coded in UTF-8.
使用UTF8编码如下
Dim byteCounter As System.Text.UTF8Encoding = System.Text.Encoding.UTF8