一个后台应用往往在不同表单都要实现数据导出或导入,一般的做法封装一个通用方法或者工具包给统一调用,从而避免重复的开发。但这有以下两个缺点。
一、不能跨语言;
二、可能不兼容版本低的项目。
开发环境
-------------------------------------------------------------------
Go 1.15版本或以上
excelize v2.4.0
使用WebAssembly(简称wasm)技术就可以规避上述两个问题,现在可以编译出wasm文件有C、C++、Rust和Go,在这选择Go,因为Go下有一个很好用,文档很详细的第三方库excelize。
实现excel导出有两核心要点。
一、对excelize进行二次封装再编译成wasm文件;
二、JS实现文件下载,由客户端(浏览器)生成excel文件,再由客户端触发下载事件,此过程不和服务器不产生任何交互。
实现excel读取要简单很多在些就不赘述了。
文章底下附上工具的源码和示例,为了避免前端开发人员的使用的不友好只对excelize简单的封装,所以不能实现复杂的excel表格的生成。
PS:示例要放在web容器访问(如:nginx),不然因为浏览的安全机制导致wasm文件不可用。
示例里的webtool.js实现了输出流的创建、下载事件的触发和读取excel文件转base64。