找回密码
 立即注册

QQ登录

只需一步,快速开始

中达安

金牌服务用户

3

主题

15

帖子

46

积分

金牌服务用户

积分
46
中达安
金牌服务用户   /  发表于:2023-8-25 11:10  /   查看:2287  /  回复:12
1金币
本帖最后由 Ellia.Duan 于 2023-8-28 11:33 编辑

期望实现的效果:
有一个无页面视图的Workbook实例,用于获取、修改等操作excel数据。

目前的实现:
目前是new Workbook(dom),然后将dom用css隐藏。考虑实际存在dom操作,性能可能会比较差。

12 个回复

正序浏览
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2023-8-28 10:29:03
12#
中达安 发表于 2023-8-28 09:14
因为我需要监听 ss.fromJSON 之后的 loaded 事件;加载完成之后开始处理业务逻辑。
也就是将你附件中导 ...

您好,此问题已复现,这边需要调研一下。
回复 使用道具 举报
中达安
金牌服务用户   /  发表于:2023-8-28 09:14:26
11#
本帖最后由 中达安 于 2023-8-28 10:17 编辑
Ellia.Duan 发表于 2023-8-25 17:58
您好,这边通过下面的代码进行测试,并没有报错
是可以正常打印ss的
如下图所示:

因为我需要监听 ss.fromJSON 之后的 loaded 事件;加载完成之后开始处理业务逻辑
也就是将你附件中导入部分代码改为:

excelIO.open(
    file,
    function (json) {
        window.ss =  new GC.Spread.Sheets.Workbook()      
        window.ss.fromJSON(json, {
            incrementalLoading: {
                loaded: () => {
                    console.log("loaded: TODO")
                },
            },
        });
    },
    function (e) {
        console.log(e);
    },
);

实际导入是成功了;但是出现了个error,loaded 回调没有被触发。
image.png510015258.png
如果 GC.Spread.Sheets.Workbook 有入参dom节点则正常




回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2023-8-25 17:58:19
10#
中达安 发表于 2023-8-25 17:39
导入excel只能需要用到 fromJSON
可是这样写会报错:Uncaught (in promise) TypeError: Cannot read pr ...

您好,这边通过下面的代码进行测试,并没有报错
  1. <div>
  2.     <input id="selectedFile" type="file" name="files[]" accept=".sjs, .xlsx, .xlsm, .ssjson, .json, .csv"/>
  3.     <input type="button" id="loadExcel" value="导入excel" class="button">

  4. </div>
复制代码
  1.   var excelIO = new GC.Spread.Excel.IO();
  2.         $("#loadExcel").click(function () {
  3.             var file = document.querySelector('#selectedFile').files[0];
  4.             if (!file) {
  5.                 return;
  6.             }
  7.             excelIO.open(
  8.                 file,
  9.                 function (json) {

  10.                     var ss =  new GC.Spread.Sheets.Workbook();
  11.                     ss.fromJSON(json);
  12.                     console.log(ss)
  13.                 },
  14.                 function (e) {
  15.                     console.log(e);
  16.                 },
  17.             );
  18.         });
复制代码
是可以正常打印ss的
如下图所示:
image.png911387023.png
您可以将您的excel文件导入到附件中,看是否还报错,如果报错的话,建议您把您的excel上传上来。

excelIO导入.html

3.13 KB, 下载次数: 74

回复 使用道具 举报
中达安
金牌服务用户   /  发表于:2023-8-25 17:39:18
9#
Ellia.Duan 发表于 2023-8-25 17:30
我给您的示例是说 ,目前通过dom元素创建了workbook实例,然后再次创建一个没有挂载在dom节点上的workboo ...

导入excel只能需要用到 fromJSON
可是这样写会报错:Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'Gw')
  1. const excelIo = new ExcelIO.IO()
  2. const tempSpread = new GC.Spread.Sheets.Workbook()
  3. excelIo.open({导入的excel文件},  tempSpread.fromJSON)
复制代码



回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2023-8-25 17:30:52
8#
本帖最后由 Ellia.Duan 于 2023-8-25 17:32 编辑
中达安 发表于 2023-8-25 17:08
你发的这个代码中 spread 是从哪来的?是这样吗。
跟最终目的:
有没有api可以不需要宿主dom创建Workbo ...

我给您的示例是说 ,目前通过dom元素创建了workbook实例,然后再次创建一个没有挂载在dom节点上的workbook实例,由于fromJSON ,toJSON可以复现场景。通过上述代码可以实现,工作簿的复制,即tempSpread复制了spread。
创建workbook实例 ,new GC.Spread.Sheets.Workbook() 这个括号里面可以传dom节点,也可不传。


我给您的示例可能误导了您,回到问题本身,您的问题是想要获取修改excel数据,那么先要导入excel ,那么为什么您需要fromJSON ? 或者说您fromJSON遇到了什么问题?

回复 使用道具 举报
中达安
金牌服务用户   /  发表于:2023-8-25 17:08:26
7#
本帖最后由 中达安 于 2023-8-25 17:30 编辑
Ellia.Duan 发表于 2023-8-25 16:01
不太明白您的意思,您现在的问题是什么?
  1. const tempSpread = new GC.Spread.Sheets.Workbook()
  2. tempSpread.fromJSON(spread.toJSON())
复制代码
你发的这个代码中 spread 是从哪来的?是这样吗?
  1. const spread = new GC.Spread.Sheets.Workbook(dom节点)
复制代码
那跟最终目的:
有没有api可以不需要宿主dom创建Workbook实例
是不是自相矛盾?


回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2023-8-25 16:01:28
6#
不太明白您的意思,您现在的问题是什么?
回复 使用道具 举报
中达安
金牌服务用户   /  发表于:2023-8-25 15:24:01
5#
Ellia.Duan 发表于 2023-8-25 11:37
试下这面这两行代码

如果还有问题,建议将spread转换成json上传上来,这边看下

spread 是指 Workbook实例对吧;试了下这样子可以。
但是!spread 还是需要宿主dom来创建才行呀。
回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2023-8-25 11:37:29
4#
试下这面这两行代码

  1. const tempSpread = new GC.Spread.Sheets.Workbook()
  2.             tempSpread.fromJSON(spread.toJSON())
复制代码
如果还有问题,建议将spread转换成json上传上来,这边看下

回复 使用道具 举报
中达安
金牌服务用户   /  发表于:2023-8-25 11:21:48
3#
Ellia.Duan 发表于 2023-8-25 11:16
您直接直接构建

这个tempSpread不会挂载在dom上。

试过。tempSpread.fromJSON 会报错
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部