客戶在實際項目開發中,會有一張公用sheet存在別的文件中,在別的文件中,想要用到公用sheet中的部分數據時,直接從公用sheet中去複製即可。
此需求如果藉助SpreadJS提供的UI行爲實現是比較方便的,可以打開兩個瀏覽器窗口,藉助瀏覽器複製、粘貼功能,實現粘貼複製,但需要注意的是,瀏覽器的粘貼複製無法複製單元格公式。如果要保留公式,此時就需要使用SpreadJS內部的複製粘貼功能,但SpreadJS內部複製、粘貼必須操作在同一個Spread當中,因此需要將公用sheet添加到當前spread當中,本質就是將公用sheet toJSON()之後,再fromJSON()到當前Spread中,之後使用SpreadJS UI行爲完成複製粘貼即可。
但用戶的本質其實是不想在藉助任何UI行爲,希望在打開SpreadJS的同時,能將公用sheet中的部分數據就複製到當前Spread當中,從而實現一套自動化的複製粘貼流程,該需求實現的思路如下:
1. 複製公用sheet到當前Spread當中
spread.addSheet(spread.getSheetCount(),new GC.Spread.Sheets.Worksheet("common")) let commonSheet = spread.getSheetFromName('common')
commonSheet.fromJSON(common) //common指公用sheet toJSON之後生成的json結構
2. 選中公用sheet待複製區域
commonSheet.setSelection(0,0,2,3) commonSheet.addSelection(4,0,2,3)
3. 執行copy命令
spread.commandManager().execute({ cmd: 'copy', sheetName: 'common', ignoreClipboard: true })
4. 選中目標sheet要粘貼的位置起點
sheet.setSelection(1,0,1,1)
5. 執行粘貼操作
spread.commandManager().execute({ cmd: 'paste', sheetName: sheet.name() })
6. 粘貼完成後刪除公用sheet
setTimeout(function(){ spread.removeSheet(spread.getSheetCount() - 1) },1000)
這裏注意到,刪除sheet包了一層setTimeout,這是因爲paste都是異步命令,需要等到這些操作完成之後在刪掉公用sheet,否則會報錯。
純前端表格控件SpreadJS,兼容 450 種以上的 Excel 公式,具備“高性能、跨平臺、與 Excel 高度兼容”的產品特性,備受華爲、蘇寧易購、天弘基金等行業龍頭企業的青睞,並被中國軟件行業協會認定爲“中國優秀軟件產品”。SpreadJS 可爲用戶提供類 Excel 的功能,滿足表格文檔協同編輯、 數據填報、 類 Excel 報表設計等業務場景需求,極大的降低企業研發成本和項目交付風險。
本文轉載自葡萄城