README
onlyoffice-excelio
把ExcelIO适配到onlyoffice,
使得用ExcelIO写的后端代码可以完全移植到前端执行,复用生成excel的逻辑。
Installation
$ npm install onlyoffice-excelio
Usage
本模块分为两个部分ExcelAPI和ExcelIO。其中ExcelIO可以直接单独引用;而ExcelAPI引用了ExcelIO。
ExcelAPI
通过加载插件扩展OnlyOffice的前端API。通过URL引用构建好的资源,依赖OnlyOffice的api.js,可以查看sandbox/sample.html
<script src="http://127.0.0.1:5180/web-apps/apps/api/documents/api.js"></script>
<script src="http://127.0.0.1:8082/onlyoffice-excelio/plugins/api.js"></script>
<script type="text/javascript">
window.onload = function () {
let docEditor = ExcelAPI.createEditor('placeholder', {
document: {
title: 'example.xlsx',
url: 'protocol//url/of/sample.xlsx'
},
editorConfig: {
mode: 'edit', // 'view' or 'edit'
user: {
id: "sample",
name: "Mr Sample"
}
}
});
};
</script>
文档下载与打印
OnlyOffice下载和打印的原理是,调用接口通知服务器生成对应类型的文件,并返回一个临时文件地址,前端通过
该地址进行下载或打印。为了对下载和打印的文档进行额外的处理,比如增加水印等,可以通过以下方式重新对原始的
下载和打印文档临时链接进行处理。具体配置参考WrappedConfig
let docEditor = ExcelAPI.createEditor('placeholder', {
downloadUrl: true, // 与document.url 相同
// downloadUrl: 'http://url/of/download', // 指定文档下载地址
// 当不同类型文档的下载地址不同时,动态url,文档可能是XSLX、PDF或者其他选择的类型,
// 目前默认时XSLX,可以通过downloadTypes指定,具体查看API文档的配置说明
// downloadUrl (url) {
// return `http://api.app.com/wartermak?url=` + encodeURIComponent(url);
// },
printUrl: 'http://url/of/pdf', // 指定文档的PDF文件地址,打印时需要
// printUrl (url) { // 文档的对应的pdf临时文件链接
// return `http://api.app.com/wartermak?url=` + encodeURIComponent(url);
// }
});
ExcelIO
可以在项目中单独引用,然后执行后端相同的代码,具体可以参考src/plugins/api/editor.js的editor.executeCode
import ExcelIO from 'onlyoffice-excelio';
import _ from 'lodash';
// 从服务端加载代码
async function loadCodeFromServer() {
const data = [{v1: 'String', v2: new Date(), v3: 3.14159}]
return `(function(name){
let data = ${JSON.stringify(data)}
let writer = Excel.createWriter({});
writer.newSheet(name).row().cell('Title1').cell('Title2').cell('Title3');
for(let d of data) {
writer.row().cell(d.v1).date(d.v2, 'YYYY-MM-DD HH:mm:ss').currency(_.round(d.v3, 2), '