dexteryao 发表于 2023-1-28 15:26:37

SpreadJS V16 在线表格编辑器使用继续使用ExcelIO导入导出Excel

本帖最后由 dexteryao 于 2023-1-28 15:28 编辑

SpreadJS V16 推出了全新的导入Excel方式,无需先转换JSON再导入.

SpreadJS V16 设计器保留原有使用Excel IO导入导入导出Excel的方式,可以通过以下方式开启。
1. 获取文件菜单模板
let DesignerNS = GC.Spread.Sheets.Designer, fileMenuTemplateName = DesignerNS.TemplateNames.FileMenuPanelTemplate;
let template = DesignerNS.getTemplate(fileMenuTemplateName), targetNode = template.content.children.children;2. 将导入导出Excel的选项和功能由新的导入方式value Excel替换为Excel IO
targetNode.children.children.children.children.items.value = "Excel IO"
targetNode.children.children.children.children.items.value = "Excel IO"3. 由于Excel是一个选项,需要将导入导出方式的默认值也修改为Excel IO
context.getData("fileMenuSetting")中放的是用户上一次选择内容,如果选过就不替换了


所有代码如下
// 由于导入Excel是第一个选项,需要修改一下初始的默认值,如果不是放到第一个,这个就不需要了
let getFileMenuOption = GC.Spread.Sheets.Designer.FileMenuHandler.getFileMenuOption;
GC.Spread.Sheets.Designer.FileMenuHandler.getFileMenuOption = function(context){
    let fileMenuSetting = context.getData("fileMenuSetting");
    let option = getFileMenuOption.call(this, context);
    console.log(option)
    if(!fileMenuSetting || !fileMenuSetting.activeCategory_import){
      option.activeCategory_import = "Excel IO"
    }
    if(!fileMenuSetting || !fileMenuSetting.activeCategory_export){
      option.activeCategory_export = "Excel IO"
    }
    return option;
}

let DesignerNS = GC.Spread.Sheets.Designer, fileMenuTemplateName = DesignerNS.TemplateNames.FileMenuPanelTemplate;
let template = DesignerNS.getTemplate(fileMenuTemplateName), targetNode = template.content.children.children;
// 默认value是Excel,使用新的导入导出选项,替换为Excel IO
targetNode.children.children.children.children.items.value = "Excel IO"
targetNode.children.children.children.children.items.value = "Excel IO"
// 也可以新增一个item
// targetNode.children.children.children.children.items.splice(1,0,{text:"ExcelIO", value:"Excel IO"});
// targetNode.children.children.children.children.items.splice(1,0,{text:"ExcelIO", value:"Excel IO"});
DesignerNS.registerTemplate(fileMenuTemplateName, template);



也可以同时开启两种导入Excel的方式,这种情况不需要重写getFileMenuOption修改默认值了
targetNode.children.children.children.children.items.splice(1,0,{text:"ExcelIO", value:"Excel IO"});
targetNode.children.children.children.children.items.splice(1,0,{text:"ExcelIO", value:"Excel IO"});





使用Excel IO导入的方式可以监听FileLoading,获取到SpreadJS ssjson
designer.bind(GC.Spread.Sheets.Designer.Events.FileLoading, function(s, e){
    console.log(s, e);
});

阿仁 发表于 2023-7-31 09:55:38

官网的实例还是IO导出,请问有没有16.1.4的demo呢

Joestar.Xu 发表于 2023-7-31 11:15:04

阿仁 发表于 2023-7-31 09:55
官网的实例还是IO导出,请问有没有16.1.4的demo呢

没太理解您的意思,目前官网的在线Excel编辑器没有使用ExcelIO,而是open的接口。

16.1.4的demo具体指的是什么呢?
页: [1]
查看完整版本: SpreadJS V16 在线表格编辑器使用继续使用ExcelIO导入导出Excel