GOOGLE sheet + APPS脚本 模拟公会战实践记录
前提
接到需求做一个公会战玩法,具体需求对齐过程这里省略,最终问题落在几个相似方案的选择上。
因为这个玩法比较大,贸然做原型和草案担心会浪费时间在返工上,于是想要用简单工具做一个玩法体验模型出来
考虑到互动性,放弃了excel后尝试使用谷歌的在线文档,以下是一些学习所得:
文档设计
谷歌文档与excel基本大同小异,公式和常用操作都能无缝转换,这里记录几个特别的点:
- 数据验证,谷歌文档支持对于不同验证值分别显示样式,以及多种下拉菜单,整体看起来高级不少
- 条件格式,设置选项感觉比excel友好些,不过高级设置还是由公式驱动,这里使用了这个公式
=COUNTIF($E$3:$Q$21,E3)>1
能够使范围内重复值标红,这里的E3就有点玄学的味道了,跟excel如出一辙 - 整列复制粘贴,复制整列以后在表头右键,发现没有插入复制的列(也许是没找到正确姿势?)这一点不如excel方便
- 权限设置,因为是在线实时多人编辑文档,谷歌文档要更重视权限问题,相应的权限的设置也更常用,这里需要多测试,脚本有涉及对单元格赋值的话这些对应单元格都需要给与权限,否则被分享人是不能顺利运行脚本的。
APPS脚本
通过帮助-APPS脚本可以创建绑定于此文档的脚本,并且可以在管理界面直接复制文档,其脚本也会复制一份并与新文档自动关联。从界面能看出来谷歌生态的强大,一个APPS脚本可以控制各种产品,gas还是以js为根基,易用性天生得到保证。
以下记录本次用到的内容备忘:
获取当前活动工作表:
var currentSheet = SpreadsheetApp.getActiveSheet();
根据表名获取工作表:
var sheet1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("player1");
获取range:
var turnRange1 = sheet1.getRange('d1:e1');
菜单栏定义:
function onOpen() { var ui = SpreadsheetApp.getUi(); ui.createMenu('公会战操作') .addItem('生成成员', 'genMembers') .addItem('重开一局', 'cleanReset') .addSeparator() .addSubMenu(ui.createMenu('阶段操作(管理员)') .addItem('准备期1', 'turn1') .addItem('斥候战', 'turn2') .addItem('准备期2', 'turn3') .addItem('正式战斗', 'turn4')) .addToUi(); }
获取单元格值和赋值:
turnRange1.getCell(1,1).setValue("准备期1") rangerPowRange1.getCell(1,1).getValue()
清理内容:
sheet1.getRange('e22:s24').clearContent()