找回密码
 立即注册

QQ登录

只需一步,快速开始

dexteryao 讲师达人认证 悬赏达人认证 SpreadJS 开发认证

超级版主

123

主题

8927

帖子

1万

积分

超级版主

Rank: 8Rank: 8

积分
13536

讲师达人悬赏达人元老葡萄SpreadJS 认证SpreadJS 高级认证微信认证勋章

dexteryao 讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-1-28 15:26  /   查看:1362  /  回复:2
本帖最后由 dexteryao 于 2023-1-28 15:28 编辑

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

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


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

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

复制代码


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



image.png697634277.png


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


2 个回复

倒序浏览
阿仁
金牌服务用户   /  发表于:2023-7-31 09:55:38
沙发
官网的实例还是IO导出,请问有没有16.1.4的demo呢
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2023-7-31 11:15:04
板凳
阿仁 发表于 2023-7-31 09:55
官网的实例还是IO导出,请问有没有16.1.4的demo呢

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

16.1.4的demo具体指的是什么呢?
SpreadJS 17.0.8 | GcExcel 7.1.0 已发布~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部