Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google sheets Google Sheets-在单元格仍处于打开状态时启动宏_Google Sheets_Google Sheets Api_Google Sheets Macros - Fatal编程技术网

Google sheets Google Sheets-在单元格仍处于打开状态时启动宏

Google sheets Google Sheets-在单元格仍处于打开状态时启动宏,google-sheets,google-sheets-api,google-sheets-macros,Google Sheets,Google Sheets Api,Google Sheets Macros,我对Google Sheets还是个新手,在此之前我主要是用VBA编程的 我正在进行的项目是一个D&D类型的游戏,DM将使用表格记录对怪物造成的伤害。基本上,DM输入伤害,点击计算按钮,然后代码将当前的伤害加总到坏蛋身上 代码工作得很好。我遇到的问题是人的问题。有一种趋势是在关闭单元格之前单击“计算”按钮 例如,DM在单元格中键入31,并在按enter键之前立即单击“计算”。这防止了损坏被正确记录,我无法找出使电池先关闭的代码 这是我目前的代码: 函数DamageRecordEnemy1Copy

我对Google Sheets还是个新手,在此之前我主要是用VBA编程的

我正在进行的项目是一个D&D类型的游戏,DM将使用表格记录对怪物造成的伤害。基本上,DM输入伤害,点击计算按钮,然后代码将当前的伤害加总到坏蛋身上

代码工作得很好。我遇到的问题是人的问题。有一种趋势是在关闭单元格之前单击“计算”按钮

例如,DM在单元格中键入31,并在按enter键之前立即单击“计算”。这防止了损坏被正确记录,我无法找出使电池先关闭的代码

这是我目前的代码:

函数DamageRecordEnemy1Copy1(){
var电子表格=SpreadsheetApp.getActive();
spreadsheet.getRange('A1').activate();
var DamageLocation=电子表格.getRange('Q4');
var DamageLogLocation=电子表格.getRange('Q5');
var DamageLocationValue=DamageLocation.getValue();
var DamageLogLocationValue=DamageLogLocation.getValue();
var NewDamage=损坏位置值+损坏位置值;
DamageLocation.activate();
电子表格.getCurrentCell().setValue(NewDamage);
DamageLogLocation.activate();
电子表格.getCurrentCell().setValue(“”);
spreadsheet.getRange('A1').activate();
}
你知道怎么解决这个问题吗?非常感谢

谢谢大家的帮助,以下是我最后做的:

函数onEdit(e){
var电子表格=SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var范围=e范围;
var DamageLocation=电子表格.getRange('Q4');
var DamageLogLocation=电子表格.getRange('Q5');
var DamageLocationValue=DamageLocation.getValue()
var DamageLogLocationValue=DamageLogLocation.getValue()
var allRows=[5];
var-allColumns=[17,20,23,26,29,32];
var EditRow=range.getRow()
var EditColumn=range.getColumn()
if(allColumns.indexOf(EditColumn)>-1)
{
if(allRows.indexOf(EditRow)>-1)
{
var BadDamage=spreadsheet.getRange(EditRow-1,EditColumn)
var BadDamageLog=spreadsheet.getRange(EditRow,EditColumn)
var DamageCalc=BadDamage.getValue()+BadDamageLog.getValue()
BadDamage.setValue(损坏计算);
BadDamageLog.setValue(“”);
}
}  
};

将“按钮”替换为插入->复选框,然后使用OneEdit功能检查该单元格是否设置为true,执行按钮代码并将其设置回false。这将起作用的原因是,图形位于它自己的图层上,但复选框将强制它们具有“按enter键”行为。

实际上,您可以使用循环引用和复选框来完成此操作,而无需任何脚本,但我需要查看工作表有多复杂,但我的回答很好地解释了如何使用复选框而不是“按钮”,因为你知道Google Sheets没有按钮,不像Excel,所以你创建了一个假按钮。。。复选框是目前最接近按钮的东西。这可能与你有关:这让我走上正轨!我很难理解java是如何管理onEdit事件的,但一旦我得到了基础,我就有点疯狂了!我无法将我的新代码粘贴到这里。。。我在上面添加了我的代码,作为一个有趣的奖励,感谢您向我展示代码的“js”技巧!