最具影响力的数字化技术在线社区

168大数据

 找回密码
 立即注册

QQ登录

只需一步,快速开始

1 2 3 4 5
打印 上一主题 下一主题
开启左侧

Smartbi电子表格--回写-单元格绑定参数

[复制链接]
跳转到指定楼层
楼主
发表于 2015-7-1 11:22:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多数据大咖,获取更多知识干货,轻松玩转大数据

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 sgre 于 2015-7-1 11:23 编辑

1、应用场景
对电子表格报表回写时,通常会遇到如下需求。1)进行回写操作时用户选择的是名称值(name),回写到数据库中的则是对应的代码值(code),而用户在报表中查看已回写的数据时还是名称值。2)用户进行单元格输入时,不是用文本框输入,而需要一个下拉框、日期控件、甚至是一个可模糊查找的对话框。上述需求,皆可通过对回写单元格绑定参数来实现,具体可参考如下内容。

2、示例说明
如下所示电子表格,以【区域】回写字段为例,在进行回写的操作时选择【区域】字段的名称,写入数据库中的是【区域】字段的代码。回写操作界面如下:

已回写到数据库表中的数据,如下图所示:

3、操作步骤
1、新建【区域】参数
在“定制 -> 公共设置”界面上,新建【区域】参数,该参数具有真实值"地图区域编号"、显示值"地图区域名称",如下图所示。下拉框参数的说明及创建过程,请参考 下拉框参数


2、新建【区域】转换规则
在“定制 -> 公共设置”界面上,新建转换规则,用来进行报表中的字段的显示转换。该转换规则具有真实值"地图区域编号"、显示值"地图区域名称",如下图:


3、设置数据集
在“定制 -> 数据集定义”界面中,设置【区域】字段的转换规则。在“查询输出”窗格中选择“区域”字段,然后在下方的属性设置窗格中,为“转换规则”属性选择第2步已建的【区域】转换规则如下图:


4、在excel设置报表回写填报属性
在 Excel 设计器中打开电子表格报表,设置【区域】列的回写填报属性为绑定参数,绑定第1步中所创建的【区域】参数,如下图:


设置 "表ID"的填报属性为,可以插入/删除行,在进行回写操作时点击该列则可以进行对数据添加、删除操作。如下图:



设置"年份"、"本期值"、"上期值"填报属性为 "单行文本",如下图:


5、在Excel中设置报表回写规则
接着再设置回写规则,把数据填充到数据库的对应表中, 设置数据表中字段与电表格中的列进行匹配,并设置一个不为空的单元格为主键。操作如下图:


6、在Excel中设置【区域】字段使用显示值
双击“区域”字段对应的单元格,弹出"单元格属性"对话框,切换到【其它】标签页,将下方的"使用显示值"复选框勾上,如下图所示。


7、发布该电子表格报表
发布该电子表格报表,在浏览器中访问时,即可看到对应的效果。


4、设置小技巧(多选,选择参数后需要显示为名称)
在默认情况下,选择参数后对应的回写单元格会显示ID值,只有在点击“保存”按钮后,对应单元格才会显示为名称值。如果想选择参数后,回写单元格立马就显示为名称值,可以通过如下宏实现。效果如下:


切换到“定制 -> 宏管理”界面,在该电子表格报表上,新建服务器端宏模块。宏对象选择spreadsheetReport,事件选择onBeforeOutput;然后将如下代码,粘贴到代码编辑区。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

// 设置多选下拉框中的选择

var ruleMap = new Array();

ruleMap[2] = "综合部";

ruleMap[3] = "人力资源部";

ruleMap[4] = "财务部";

ruleMap[5] = "业务拓展部";

ruleMap[6] = "科技管理部";

ruleMap[8] = "用户与市场研究所";

ruleMap[9] = "网络技术研究所";

ruleMap[10] = "无线技术研究所";

ruleMap[11] = "业务研究所";

ruleMap[12] = "测试技术研究所";


function main(spreadsheetReport) {

    var sheet = spreadsheetReport.workbook.getWorksheets().get(0);

    var targetColumn = 5;       // F列

    for (var i=0;i<10;i++) {   //假设对 10 行进行处理

        var targetCell = sheet.cells.get(i,targetColumn );

        var curValue = targetCell.getValue();

        if(curValue)

            targetCell.setValue(doTrans(curValue));

    }

}


// 将值进行转换

function doTrans(curValue) {

    var strArray = curValue.split(",");

    for (var i=0;i<strArray.length;i++) {

        if (needTrans(strArray)) {

            if (ruleMap[parseInt(strArray)]) {

                strArray = ruleMap[strArray];

            }

        }

    }

    return strArray.join(",");

}

// 检查当前的值是不是需要进行转换

function needTrans(subValue) {

    return parseInt(subValue)==subValue;    //如果是整数认为要转换

}




5、设置小技巧(单选,选择参数后需要显示为名称)
在默认情况下,选择参数后对应的回写单元格会显示ID值,只有在点击“保存”按钮后,对应单元格才会显示为名称值。如果想选择参数后,回写单元格立马就显示为名称值,可以通过如下宏实现。

切换到“定制 -> 宏管理”界面,在该电子表格报表上,新建客户端宏模块。宏对象选择spreadsheetReport,事件选择onWriteBackCellValueChanged;然后将如下代码,粘贴到代码编辑区。

1

2

3

4

5

6

7

8

9

10

function main(spreadsheetReport, editingCellPosition, oldValue, newValue, newDisplayValue) {

    // debugger;

    setTimeout(function() {

        var c = spreadsheetReport.getCell(editingCellPosition.row, editingCellPosition.column);

        if (c) {

            spreadsheetReport.setCellText(c, newDisplayValue || newValue);

        }

    },

    1000);

};



本文源自:http://wiki.smartbi.com.cn/pages/viewpage.action?pageId=10354985













楼主热帖
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享 分享淘帖 赞 踩

168大数据 - 论坛版权1.本主题所有言论和图片纯属网友个人见解,与本站立场无关
2.本站所有主题由网友自行投稿发布。若为首发或独家,该帖子作者与168大数据享有帖子相关版权。
3.其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和168大数据的同意,并添加本文出处。
4.本站所收集的部分公开资料来源于网络,转载目的在于传递价值及用于交流学习,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。
5.任何通过此网页连接而得到的资讯、产品及服务,本站概不负责,亦不负任何法律责任。
6.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源,若标注有误或遗漏而侵犯到任何版权问题,请尽快告知,本站将及时删除。
7.168大数据管理员和版主有权不事先通知发贴者而删除本文。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

关于我们|小黑屋|Archiver|168大数据 ( 京ICP备14035423号|申请友情链接

GMT+8, 2024-5-28 20:01

Powered by BI168大数据社区

© 2012-2014 168大数据

快速回复 返回顶部 返回列表