純前端表格控件SpreadJS 中導入導出規(guī)范以及常見錯誤解決辦法(前端數(shù)據(jù)導出為excel)
前言 | 問題背景
SpreadJS表格控件有著很強大的純前端的導入導出功能,可以直接在純前端導入導出Excel,通過擴展還可以實現(xiàn)服務器端導入導出。是用戶最常使用的功能之一。
使用規(guī)范
JS文件的引入
導入導出功能需要在引入SpreadJS基本JS文件的基礎上額外引入兩個文件:
- gc.spread.excelio.xx.x.x.min.js(必選)
- FileSaver.js(可選)
1、 gc.spread.excelio.xx.x.x.min.js是導入導出的核心文件,里面包含了導出導出的邏輯,將用戶提供的表格序列化ssjson文件轉換成Excel類型(前端對應為application/zip)的一個blob二進制對象。這里注意因為Excel本身是一個壓縮格式,所以轉換的對象類型對應為application/zip,如果需要轉換為其他形式,請自行處理,例如將該對象base64編碼后轉換為字符串或者流等。
2、 FileSaver.js是第三方開源的一個js組件,用戶做前端文件下載保存的功能。故而不是必須的,也可以自己處理相關操作或者用其他的類型功能組件進行替換。這里注意的是如果需要導出至服務器端,那么不需要引入此js文件??梢灾苯訉lob對象通過請求發(fā)至服務器端并在服務器端保存成Excel格式的文件即可。
瀏覽器支持
SpreadJS本身使用了html5的canvas技術,所以瀏覽器支持必須是支持html5的瀏覽器,例如:chrome,firefox,IE9以上等。
而導入導出功能按照上面所說如果要使用filesaver來做前端下載,那么IE瀏覽器需要10以上的版本才能支持FileSaver.js,這里跟SpreadJS本身的瀏覽器支持有些出入。
授權方式
如果是一般的html js css這樣的web應用開發(fā),導入導出組件不需要授權。只需要對SpreadJS進行授權即可。
如果是typescript開發(fā)常見于:angular,react,vue等框架使用,需要對導入導出組件(ExcelIO)進行單獨授權,像這樣:
GC.Spread.Sheets.LicenseKey = Excel.LicenseKey = \”yourkey\”;
常見問題解決辦法
由于我們示例代碼中導入導出部分加入了try catch的異常捕獲,這樣會導致異常很難定位,這里列出常見可能會出問題的情況:
- 導入時Excel文件是否為xlsx格式,SpreadJS支持的導入格式必須為xlsx格式
- FileSaver.js文件是否引用(這里有個前提,需要做純前端導出,并且使用的是我們官網(wǎng)例子中的方式)
- 如果使用了FileSaver請注意瀏覽器的支持范圍(參考上面第二點瀏覽器支持)
- 如果是框架開發(fā),是否對ExcelIO組件進行授權(參考上面第三點授權方式中的描述)
如果上述仍然沒有排查出問題,可以將try catch的異常捕獲去掉來定位原因。如果還是無法排查問題,可以像我們求助處理,一起討論。
關于葡萄城
賦能開發(fā)者!葡萄城公司成立于 1980 年,是全球領先的集開發(fā)工具、商業(yè)智能解決方案、管理系統(tǒng)設計工具于一身的軟件和服務提供商。西安葡萄城是其在中國的分支機構,面向全球市場提供軟件研發(fā)服務,并為中國企業(yè)的信息化提供國際先進的開發(fā)工具、軟件和研發(fā)咨詢服務。葡萄城的控件和軟件產品在國內外屢獲殊榮,在全球被數(shù)十萬家企業(yè)、學校和政府機構廣泛應用。