我有一个简单的HTML表格,例如只有一个单元格,但当我复制DOM节点并粘贴到Excel中时,它会被识别为两行,如何使Excel获取正确的粘贴数据。
<table><tr><td>1<br>2</td><tr></table>
我尝试添加 CSS 样式
br {mso-data-placement:same-cell;},
但它只在IE中起作用。
注意,直接复制纯文本是不可以的,我需要在单元格中添加颜色、字体等信息。
我有一个简单的HTML表格,例如只有一个单元格,但当我复制DOM节点并粘贴到Excel中时,它会被识别为两行,如何使Excel获取正确的粘贴数据。
<table><tr><td>1<br>2</td><tr></table>
我尝试添加 CSS 样式
br {mso-data-placement:same-cell;},
但它只在IE中起作用。
注意,直接复制纯文本是不可以的,我需要在单元格中添加颜色、字体等信息。
正如许多人可能已经知道的那样,你可以通过添加正确的内容类型和内容分发头信息,将数据(如报告)输出为Excel文件:
Response.ContentType = “application/vnd.ms-excel“;
Response.AppendHeader(“content-disposition“, “inline; filename=report.xls“);
如果客户端已经安装了MS Excel,你的输出HTML页面将会在Excel中打开,而不是在Web浏览器中。Excel将解释所有的格式(边框、字体等)和表格标签,这将导致一个漂亮的、格式化好的工作表,而无需使用服务器端控件。br {mso-data-placement:same-cell;}
那么它就像一个魔法般地运作。希望它有用 :)
提示:您可以使ContentType和header条件化,提供一个文件的HTML / XLS备选报告。
{mso-data-placement:same-cell;}
。 - cropredy<br style="mso-data-placement:same-cell;"/>
中添加代码并从 Internet Explorer 复制输出结果的方式成功实现了复制粘贴功能。 - krubo使用以下代码的宏怎么样?
• TransformingPaste1()
: 然而,在我的机器上失败了(仍然是多个单元格)
mso-data-placement:same-cell
粘贴转换后的版本• TransformingPaste2()
: 在我的机器上在单个单元格中粘贴,保留格式等,但由于仍在粘贴HTML,结果是空格而不是换行符
vbCrLf
粘贴转换后的版本• TransformingPaste3()
: 在我的机器上在单个单元格中粘贴,带有换行符,但丢失格式等(当前实现)-请参见链接的注释!
根据您的需求进行修改,例如使用正则表达式进行替换,但我希望这能帮助您迈出第一步:]
Function GetClipboardText() As String
Dim BufObj As MSForms.DataObject
Set BufObj = New MSForms.DataObject
BufObj.GetFromClipboard
GetClipboardText = BufObj.GetText
End Function
Function SetClipboardText(ByRef text As String)
Dim BufObj As MSForms.DataObject
Set BufObj = New MSForms.DataObject
BufObj.SetText text
BufObj.PutInClipboard
End Function
Function PreProcess(ByRef text As String, ByRef find As String, ByRef replace As String) As String
PreProcess = Application.WorksheetFunction.Substitute(text, find, replace)
End Function
Function PostProcess(ByRef find As String, ByRef replace As String)
Dim rCell As range
For Each rCell In Selection
'TODO: e.g. combine with answers from https://dev59.com/8UvSa4cB1Zd3GeqPg70K
rCell.Formula = Application.WorksheetFunction.Substitute(rCell.Formula, find, replace)
Next
End Function
Sub TransformingPaste1()
Dim OrigText As String
Dim TempToken As String
Dim PasteText As String
Dim sSelAdd As String
OrigText = GetClipboardText
PasteText = PreProcess(OrigText, "<html>", "<html><style>br{mso-data-placement:same-cell;}</style>")
SetClipboardText PasteText
'Selection.PasteSpecial "Unicode Text"
ActiveSheet.Paste
SetClipboardText OrigText
Application.CutCopyMode = False
End Sub
Sub TransformingPaste2()
Dim OrigText As String
Dim TempToken As String
Dim PasteText As String
Dim sSelAdd As String
OrigText = GetClipboardText
PasteText = PreProcess(OrigText, "<br>", vbCrLf)
SetClipboardText PasteText
ActiveSheet.Paste
SetClipboardText OrigText
Application.CutCopyMode = False
End Sub
Sub TransformingPaste3()
Dim OrigText As String
Dim TempToken As String
Dim PasteText As String
Dim sSelAdd As String
OrigText = GetClipboardText
TempToken = "#mybr#"
PasteText = PreProcess(OrigText, "<br>", TempToken)
SetClipboardText PasteText
ActiveSheet.Paste
SetClipboardText OrigText
PostProcess TempToken, vbLf
Application.CutCopyMode = False
End Sub
如果你真的需要复制粘贴,最好在复制数据之前编辑Excel表格中的“单元格属性”。在Excel中右键单击列名并选择单元格属性。根据您的数据适用情况进行更改并保存。现在,您可以复制您的数据,并希望它在MS-Excel中被正确解释。
我还没有在HTML内容中使用过它。