我尝试使用React-Copy-To-Clipboard为我的应用创建复制到剪贴板功能,该功能会将一些数据行从表复制到剪贴板,并以制表符分隔格式Excel将正确粘贴。
即。将每个行项目加入' \ t'和' \ n'在每一行的末尾。
(向我使用coffeeScript的任何人致歉)
convertToTabSeparated : (rows) ->
dataRows =
rows
.map (row) -> row.join('\t')
.join('\n')
return dataRows

这个粘贴的输出看起来绝对应该: - 在控制台上 - 在文本编辑器中 - 甚至在使用'粘贴特殊>粘贴值'在Excel桌面(或Google电子表格中的类似特殊粘贴)。
问题是Excel中一个简单的非特殊粘贴会导致所有值都粘贴到一个单元格中。
当我使用云端版本的MS Excel时,更多地使用Muddying the waters水域,情况并非如此 - 通过常规粘贴它可以正常工作。
另一件事:当我粘贴到文本编辑器中,然后再次复制并将结果重新粘贴到Excel中时,它在所有情况下都能正常工作。
那么:有没有人知道反应复制到剪贴板组件可能产生的任何字符/格式问题导致\ t和\ n在进行常规粘贴时没有正确注册?
发现了一些解决方案: 似乎有问题的React库使用周围的html元素将数据复制到剪贴板,而Excel并不热衷于此。 我决定将我自己的副本添加到剪贴板DOM方法,如下所示,使用相同的方法,但使用textarea而不是span,并使用略有不同的选择方法。似乎工作得很好。
copyToClipboard : (text) ->
textArea = document.createElement("textarea")
textArea.style.position = 'fixed'
textArea.style.top = 0
textArea.style.left = 0
textArea.style.width = '2em'
textArea.style.height = '2em'
textArea.style.padding = 0
textArea.style.border = 'none'
textArea.style.outline = 'none'
textArea.style.boxShadow = 'none'
textArea.style.background = 'transparent'
textArea.value = text
document.body.appendChild(textArea)
textArea.select()
try
successful = document.execCommand 'copy'
msg = successful ? 'successful' : 'unsuccessful'
log 'Copying text command was ' + msg
catch err
alert 'Unable to copy'
document.body.removeChild textArea
答案 0 :(得分:0)
Excel期望使用上次使用" test to columns"时使用的分隔符作为分隔符。尝试将粘贴的表格手动拆分为一次,然后重试。