如何處理 excel 格式復(fù)制

背景

后臺(tái)開發(fā)過程中,涉及到表格類的需求上,往往出現(xiàn)復(fù)制表格數(shù)據(jù)到 excel 上的需求,以供使用人員繼續(xù)表格數(shù)據(jù)的處理。此方案旨在說明這類需求可能會(huì)遇到的難點(diǎn)以及如何處理。

原理-為什么剪切板中的文本可以按行按列地被顯示處理

excel 或者是 numbers 可以實(shí)現(xiàn)數(shù)據(jù)復(fù)制,實(shí)際上是對(duì) csv 的兼容帶來的?這個(gè)還沒有得到驗(yàn)證。

基本表達(dá)方式-格式化的規(guī)則

  1. 單元格。使用 \t 制表符來表示
  2. 換行。使用 \n 或者是 \r 來表示

流程

  1. 格式化數(shù)據(jù),利用制表符或者換行符
  2. 將格式化之后的數(shù)據(jù)放到剪切板中

剪切板功能

  1. 新建一個(gè)元素,并將數(shù)據(jù)放置到該元素中
  2. 監(jiān)聽該元素的 copy 事件,其回調(diào)當(dāng)中有 clipboardData 對(duì)象。
  3. 利用該對(duì)象的 setData,將數(shù)據(jù)放置到剪切板當(dāng)中。
  4. 執(zhí)行 document.execCommand('copy') 觸發(fā) copy 事件

方案設(shè)計(jì)的重點(diǎn)

  1. 格式的兼容性。microsoft excel 與 mac numbers 對(duì)于格式的處理不一致。
  2. 如何使用剪切板功能??梢允褂?
    1. copy-to-clipboard,實(shí)現(xiàn)了將指定文檔放入剪切板的能力。
    2. react-copy-to-clipboard, 基于 copy-to-clipboard 實(shí)現(xiàn)了 react 的封裝,可以使用聲明式的組件完成復(fù)制功能的描述。

兼容性問題

  1. 需要將 format 設(shè)置為 ’text/plain‘,這是為了不繼承 html 的樣式,會(huì)更加容易處理樣式問題
  2. 需要注意盡量不要使用 空格,因?yàn)樵?numbers 中,空格被認(rèn)為是制表符。還沒有找到方法處理 numbers 中對(duì)空格的處理。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • The TODO Tool Window 待辦事項(xiàng)工具窗口 TODO means, of course, to d...
    青木729閱讀 1,437評(píng)論 0 7
  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,727評(píng)論 0 5
  • 最近開發(fā)過程中有使用到復(fù)制/粘帖功能,也在其中遇到了一些問題,就順勢(shì)學(xué)習(xí)一下復(fù)制粘貼相關(guān)的知識(shí)。 一、前言 And...
    MrTrying閱讀 34,991評(píng)論 2 20
  • 一、Python簡(jiǎn)介和環(huán)境搭建以及pip的安裝 4課時(shí)實(shí)驗(yàn)課主要內(nèi)容 【Python簡(jiǎn)介】: Python 是一個(gè)...
    _小老虎_閱讀 6,353評(píng)論 0 10
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,681評(píng)論 1 32

友情鏈接更多精彩內(nèi)容