找回密码
 立即注册

QQ登录

只需一步,快速开始

Winny

超级版主

130

主题

246

帖子

1526

积分

超级版主

Rank: 8Rank: 8

积分
1526
Winny
超级版主   /  发表于:2023-6-9 16:53  /   查看:1148  /  回复:6
需求背景:使用在线表格编辑器打开文件之后,在客户操作完之后,判断文件是否被修改,如果有修改,则重新保存文件。

实现方案:
    这种需求其实要具体分析。不少客户最开始会选择用MD5来作为验证算法。DM5验证原理是,只要有一个字节的内容发生了变化,得到的MD5值就会完全不相同。这一点是不太适用于Excel文件的。因为Excel文件中,除了基础数据,还有公式、透视表等其它的非结构化数据。Excel中的时间日期函数会随着打开文件的时间做自动的刷新,但其实这种变化,对用户来说,并不属于文件变化。因此MD5加密算法并不适用于Excel文件。
    在SpreadJS当中,如果我们在项目中使用了在线表格编辑器,可以考虑调用下面的代码:
  1. designer.getData('isFileModified')
复制代码
当该方法返回为true时,表示文件发生过变化。当我们对文件进行增加删除行列、填充背景、修改值等操作时,该方法都会返回true。值得注意的是,如果在做了修改之后,再进行撤销回退到最初状态,该方法也会认为文件发生了变化,返回为true。
     如果项目中没有使用在线表格编辑器,则可以通过获取脏数据来判断文件是否发生修改。脏数据的概念可以先点击学习指南进行了解。但是需要注意的是,脏数据遂于新增行等一些特定行为,并不会判定为脏数据,可以结合事件监听等方式判断。此种实现方式需要考虑的情况会比较多,需要根据需求设计合适的监听事件。如果只是简单判断,还是比较推荐designer.getData('isFileModified')这种方式。
   

6 个回复

倒序浏览
爱怎么敷衍
注册会员   /  发表于:2023-8-21 17:05:46
沙发
那文件执行在当前页面执行一次保存后,怎么更新当前被改的状态
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2023-8-21 17:40:04
板凳
爱怎么敷衍 发表于 2023-8-21 17:05
那文件执行在当前页面执行一次保存后,怎么更新当前被改的状态

您可以通过designer.setData('isFileModified', false),将标记重置。
SpreadJS 17.0.8 | GcExcel 7.1.0 已发布~
回复 使用道具 举报
爱怎么敷衍
注册会员   /  发表于:2023-9-21 15:14:00
地板
Joestar.Xu 发表于 2023-8-21 17:40
您可以通过designer.setData('isFileModified', false),将标记重置。

已解决,谢谢
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2023-9-21 15:42:08
5#

不客气哈。
SpreadJS 17.0.8 | GcExcel 7.1.0 已发布~
回复 使用道具 举报
爱怎么敷衍
注册会员   /  发表于:2024-3-26 17:11:15
6#
designer.getData('isFileModified')  是不是复制内容进行不会变成true呀
回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2024-3-29 17:27:41
7#
您好,您的问题是指:在Designer中复制了内容,没有进行其他操作,此时designer.getData('isFileModified')是否返回true吗?


如果没有做其他操作,designer.getData('isFileModified') 返回false 。
如果上述解释,没有解决您的问题,您可以发一个新帖详细描述下您的问题。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部