前端如何导出带公式的 Excel 文件

目前有没有比较成熟的开源方案呢:

我了解的
在线编辑方案有:
handsontable@6.2.2
导入导出方案有:
js-xlsx

怎么导出Excel带 公式 和 样式 呢

阅读 6.1k
2 个回答

简单查了一下,js-xlsx支持公式吧
clipboard.png

用 SpreadJS 吧,SpreadJS 是一款基于 HTML5 的纯前端表格控件,兼容 450 多种 Excel 公式,具备“高性能、跨平台、与 Excel 高度兼容”的产品特性,备受华为、明源云、远光软件等知名企业青睐,被中国软件行业协会认定为“中国优秀软件产品”。SpreadJS 在界面和功能上与 Excel 高度类似,但又不局限于 Excel,而是为企业信息化系统提供 表格文档协同编辑、 数据填报 和 类 Excel 报表设计 的应用场景支持,极大降低了企业研发成本和项目交付风险。

导入导出Excel

导入导出Excel支持将Spread json导出为Excel文件(.xlsx)和将excel文件导入为Spread json.加载你最复杂的Excel文件,进行更改,然后在导回Excel文件,将数据保存到数据库。在浏览器内此功能可以将Excel文件(.xlsx)导入Spread json,并将Spread json导出到Excel。 Spread JSON使加载和保存Spread实例变得容易。

使用导入导出Excel, 你需要将相关的js文件添加的document的head区域。例如:

<head>
...
<script src='.../gc.spread.sheets.all.x.x.x.min.js' type='text/javascript'></script>
<script src='.../interop/gc.spread.excelio.x.x.x.min.js' type='text/javascript'></script>
</head>
初始化Workbook实例和ExcelIO实例。

var spread = new GC.Spread.Sheets.Workbook(document.getElementById('ss'));
var excelIo = new GC.Spread.Excel.IO();

接下来你就可以使用open方法将excel文件导入为spread json,使用 save 方法将spread json导出为excel文件。

例如:

//import excel file to SpreadJS json
excelIo.open(excelFile, function (json) {
    var workbookObj = json;
    workbook.fromJSON(workbookObj);
}, function (e) {
    // process error
    console.log(e);
});
//export SpreadJS json to excel file
excelio.save(json, function (blob) {
    //do whatever you want with blob
    //such as you can save it
}, function (e) {
    //process error
    console.log(e);
});

同时,你还打开或保存一个带有密码保护的excel文件,只需要在open和save方法中传入参数options{password:xxxx}即可。例如:

//import excel file to SpreadJS json
excelIo.open(excelFile, function (json) {
    var workbookObj = json;
    workbook.fromJSON(workbookObj);
}, function (e) {
    // process error
    console.log(e);
},{password:xxxx});
//export SpreadJS json to excel file
excelio.save(json, function (blob) {
    //do whatever you want with blob
    //such as you can save it
}, function (e) {
    //process error
    console.log(e);
},{password:xxxx});

为了提高文件导入的速度,你可以使用calcOnDemand属性来指定是否仅在需要时才计算公式。例如:

var spread = new GC.Spread.Sheets.Workbook(document.getElementById('ss'), {calcOnDemand: false});
var excelIo = new GC.Spread.Excel.IO();

ExcelIO导出时保存工作表的滚动位置。下次打开工作簿时,会自动滚动到上次的位置。

这实际上记录了工作表的左上方单元格。例如,如果保存工作簿时左上角的单元格是A22,则再次打开工作表时,该表将自动滚动以使该单元格位于左上角。

这在用户编辑大型工作簿时尤其有用。当重新打开工作簿后,他们不必一直滚动回到他们上次编辑的位置,而是可以从停下来的地方继续工作。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题