背景
后台开发过程中,涉及到表格类的需求上,往往出现复制表格数据到 excel 上的需求,以供使用人员继续表格数据的处理。此方案旨在说明这类需求可能会遇到的难点以及如何处理。
原理-为什么剪切板中的文本可以按行按列地被显示处理
excel 或者是 numbers 可以实现数据复制,实际上是对 csv 的兼容带来的?这个还没有得到验证。
基本表达方式-格式化的规则
- 单元格。使用 \t 制表符来表示
- 换行。使用 \n 或者是 \r 来表示
流程
- 格式化数据,利用制表符或者换行符
- 将格式化之后的数据放到剪切板中
剪切板功能
- 新建一个元素,并将数据放置到该元素中
- 监听该元素的 copy 事件,其回调当中有 clipboardData 对象。
- 利用该对象的 setData,将数据放置到剪切板当中。
- 执行 document.execCommand('copy') 触发 copy 事件
方案设计的重点
- 格式的兼容性。microsoft excel 与 mac numbers 对于格式的处理不一致。
- 如何使用剪切板功能。可以使用
- copy-to-clipboard,实现了将指定文档放入剪切板的能力。
- react-copy-to-clipboard, 基于 copy-to-clipboard 实现了 react 的封装,可以使用声明式的组件完成复制功能的描述。
兼容性问题
- 需要将 format 设置为 ’text/plain‘,这是为了不继承 html 的样式,会更加容易处理样式问题
- 需要注意尽量不要使用 空格,因为在 numbers 中,空格被认为是制表符。还没有找到方法处理 numbers 中对空格的处理。
网友评论