MS Excel将制表符分隔的字符串从React-Copy-To-Clipboard粘贴到一个单元格中

时间:2017-07-21 10:07:57

标签: excel reactjs copy-paste

我尝试使用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

1 个答案:

答案 0 :(得分:0)

Excel期望使用上次使用" test to columns"时使用的分隔符作为分隔符。尝试将粘贴的表格手动拆分为一次,然后重试。