整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

报表界面开发:如何设计对表格工作簿的权限控制

preadJS ,作为一款基于 HTML5 的纯前端电子表格控件,兼容 450 种以上的 Excel 公式,可为用户带来亲切的 Excel 使用体验,并可满足企业IT部门 Web Excel 组件开发、数据填报、Excel 类报表设计、表格文档协同编辑等业务场景。

离线填报,作为数据填报的典型应用场景之一,可以让业务人员在生产环境中,随时随地随心的完成填报工作,而不受限于网络。

离线填报的一般实现流程是:

  1. 输出HTML 离线报表
  2. 非网络环境下进行数据填报
  3. 联网后,再进行数据提交

因为涉及到异步操作的过程,需要对离线填报人员做出权限控制,这个时候密码保护就显得尤为重要了。

SpreadJS作为一款在线Excel编辑控件,目前仅支持工作簿密码保护,暂不支持工作表密码保护功能。不过SpreadJS在设计之初,为了保持对Excel最大的兼容度,在将Excel的工作表导入时,密码相关部分也会保存进SpreadJS的ssjson中,通过spread.toJSON() 的序列化之后,我们也可以正常使用密码保护功能,序列化的Json文件如下图所示:

上图中红框所示部分就是工作表的密码保护以及设置的密码字符串。

我们只要将这一部分保留,就可以在我们设计的Excel模板上添加对应的工作表保护。

请注意,由于Excel本身会将密码进行一次加密,所以我们无法直接修改json中的对应的键值来更改成我们想要的明文密码,所以我们需要预先导入一次我们设置好对应密码的Excel,用来提取密码的相关信息。

可以按照下面的演示进行操作:

1. 首先导入一个空Excel,给对应的工作表设置对应的密码保护

2. 将该Excel导入到SpreadJS中,然后通过spread.toJSON()来获取整个json,通过代码找到对应的密码保护相关设置:

var json = spread.toJSON()
var protectOptions = json.sheets.Sheet1.protectionOptions

这里由于Excel中默认是在Sheet1这个工作簿上设置的密码保护,所以需要用json.sheets.Sheet1.protectionOptions来获取对应的protectOptions设置,并将其暂时存储在变量中以备后用。

3. 接下来我们正常设计填报模板。

填报模板的设计原理是相同的,但设计方法不同,尤其体现在桌面设计器和在线表格编辑器中,这一点需要注意。

填报模板的设计原理:将临时保存的protectOptions merge到最终生成的ssjson中。(SpreadJS的ExcelIO导出Excel时需要使用spread序列化toJSON生成的ssjson,因此通过js操作,我们就可以将之前临时保存的protectOptions merge进去。)

由于在设计表单保护时勾选的操作也会更改protectionOptions,如果单纯替换就会导致设计模板时候设置的表单保护选项丢失,例如:我们在设计模板的时候勾选了调整行列大小,如下所示:

此时,protectOptions中会记录

如果我们将之前临时保存的protectOptions直接替换,那么上述设置就会丢失。

所以这里需要如下操作:

首先,将目前的protectOptions临时保存:


var tempProtectOptions = json.sheets.Sheet1.protectionOptions


然后,替换为之前带有密码的protectOptions:


json.sheets.Sheet1.protectionOptions = protectOptions


之后,将tempProtectOptions里面的内容merge进去:


<div>json.sheets.Sheet1.protectionOptions.allowResizeRows = true;</div>
<div>json.sheets.Sheet1.protectionOptions.allowResizeColumns = true;</div>


最后,将调整之后的ssjson交给ExcelIO进行导出:


<div>
<span style="color: rgb(51, 51, 51); font-family: monospace, monospace; font-size: 16px; white-space: pre; background-color: rgb(248, 248, 248);"> excelio.save(json, </span><span class="hljs-function" style="box-sizing: inherit; color: rgb(51, 51, 51); font-family: monospace, monospace; font-size: 16px; white-space: pre;"><span class="hljs-keyword" style="box-sizing: inherit; font-weight: 700;">function</span> (<span class="hljs-params" style="box-sizing: inherit;">blob</span>) </span><span style="color: rgb(51, 51, 51); font-family: monospace, monospace; font-size: 16px; white-space: pre; background-color: rgb(248, 248, 248);">{
</span><span style="color: rgb(51, 51, 51); font-family: monospace, monospace; font-size: 16px; white-space: pre; background-color: rgb(248, 248, 248);">
}, 
</span><span class="hljs-function" style="box-sizing: inherit; color: rgb(51, 51, 51); font-family: monospace, monospace; font-size: 16px; white-space: pre;"><span class="hljs-keyword" style="box-sizing: inherit; font-weight: 700;">function</span> (<span class="hljs-params" style="box-sizing: inherit;">e</span>) </span><span style="color: rgb(51, 51, 51); font-family: monospace, monospace; font-size: 16px; white-space: pre; background-color: rgb(248, 248, 248);">{</span><span style="color: rgb(51, 51, 51); font-family: monospace, monospace; font-size: 16px; white-space: pre; background-color: rgb(248, 248, 248);">
</span><span class="hljs-built_in" style="box-sizing: inherit; color: rgb(0, 134, 179); font-family: monospace, monospace; font-size: 16px; white-space: pre;">console</span><span style="color: rgb(51, 51, 51); font-family: monospace, monospace; font-size: 16px; white-space: pre; background-color: rgb(248, 248, 248);">.log(e);
});
</span>
</div>


此时,导出的Excel中就会带有密码了,密码就是之前导入Excel中设置的密码,这样在离线填报时候就可以控制填报人员的操作权限了,填报人员也无法对有密码保护的文件进行修改。

以上,就是SpreadJS在离线填报的场景下,实现密码权限控制的方法,您可以在 SpreadJS 的在线表格编辑器 完成密码设置,并导入Excel中查看效果。

SpreadJS v13.2

SpreadJS 是一款基于 HTML5 的纯前端电子表格控件,兼容 450 种以上的 Excel 公式,凭借其 “高性能、跨平台、与 Excel 高度兼容”的产品特性,备受以华为、苏宁易购、天弘基金等为代表的企业用户青睐。SpreadJS 为用户带来亲切的 Excel 使用体验的同时,满足 Web Excel 组件开发、表格文档协同编辑、数据填报、Excel 类报表设计等业务场景,极大降低了企业研发成本和项目交付风险。

本文转载自葡萄城

点击下方“了解更多”获取更多界面开发教程!


<style>

.textVertical{

padding:5px 20px;

width:24px;

line-height:24px;

}

.backgroundImg{

background-image:url(bg.jpg);

background-repeat:no-repeat;

background-size:100% 100%;

}

.trBackground{

background-image:url(bg.jpg);

background-repeat:no-repeat;

background-size:100% 60px;

}

</style>

<table border="1" width="600" cellspacing="10" cellpadding="10" bgcolor="#ffe4c4" align="center">

<caption>学籍表</caption>

<thead bgcolor="#f004c4">

<tr>

<th>姓名</th>

<th>性别</th>

<th>专业</th>

<th>辅导员</th>

</tr>

</thead>

<tr>

<td>吴杰</td>

<td>女</td>

<td>计算机网络技术</td>

<td rowspan="2">刘凯</td>

</tr>

<tr>

<td>张力</td>

<td>男</td>

<td>计算机应用</td>

</tr>

</table>

ijmo是一款使用TypeScript编写的新一代JavaScript/HTML5控件集。它秉承触控优先的设计理念,在全球率先支持AngularJS,并提供性能卓越、零依赖的FlexGrid 和图表等多个控件。

FlexSheet是一个快速轻量的控件,可以轻松导入电子表格、应用公式、格式化和冻结表格、格式化冻结的单元格、撤销/重做以及导出数据到Excel。在web应用中使用FlexSheet能拥有与使用Excel相似的体验。

下面来介绍FlexSheet的基本功能。

快速灵活的表单控件

FlexSheet集中了Excel的主要特性:小型,快速和能扩展。这个理念促使我们在保证为您提供无限扩展可能的同时始终保持以HTML5和javascript为核心。

囊括常用公式

FlexSheet包含了内置公式的计算引擎,覆盖了近100个公式,还能自动化完成。我们的公式结合了Microsoft Excel的操作,包括聚合操作、数学运算、逻辑和文本。

导入和导出到Excel

FlexSheet能够导入已有的Excel电子表格,修改表格,和重新导出到Excel文件,它为用户提供了一个灵活的跨应用的HTML5电子表格体验。

熟悉的体验

从键盘导航到数据实体,FlexSheet 功能的设计就是为了让用户有熟悉的体验。FlexSheet 的功能与Excel相似,这样您就能跳过入门学习,从而提高生产效率,还能让用户有像回家的熟悉感觉。

灵活的数据绑定

FlexSheet不仅支持非绑定的数据,还支持数据绑定表格。在绑定模式下,列可以被定义和绑定数据,就像FlexGrid一样。实际上,FlexSheet扩展了FlexGrid。在非绑定模式下,您可以通过编程在空表格里设置表格值。

构建一个AngularJS电子表格

AngularJS是现今最流行最强大的JavaScript应用框架。我们为我们的所有控件运送和维护AngularJS指令,包括大多数示例中都会用到的FlexSheet。

AngularJS FlexSheet指令让您声明创建与Excel类似的Angular电子表格, 所有的指令都是以标记的形式。当然,您也可以在其他框架中使用FlexSheet。

在应用程序中FlexSheet,能够给用户提供一个熟悉的强大的工具分析数据。

快人一步,免费试用

试用Wijmo,或了解金鸡献瑞ComponentOne全线产品7折迎春活动,请通过以下方式联系我们:

微信:GrapeCityDT

邮件:marketing.xa@grapecity.com

官网:www.gcpowertools.com.cn

关于葡萄城

葡萄城是全球最大的控件提供商,世界领先的企业应用定制工具、企业报表和商业智能解决方案提供商,为超过75%的全球财富500强企业提供服务。