Google apps script 如何获取脚本,将两个变量的总和添加到工作表中的第三列

Google apps script 如何获取脚本,将两个变量的总和添加到工作表中的第三列,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我有两个单独的脚本,要求用户输入他们的开始里程(输入第3列)和结束里程(输入第4列)。在输入结束里程后,如何才能将总里程输入第10列?我曾尝试在工作表上输入函数,但下一次数据输入会覆盖该函数 我的2个脚本如下所示: var StartMileage = SpreadsheetApp.getUi().prompt("Please enter Start Mileage.").getResponseText(); var ss = SpreadsheetApp.getActiveSpread

我有两个单独的脚本,要求用户输入他们的开始里程(输入第3列)和结束里程(输入第4列)。在输入结束里程后,如何才能将总里程输入第10列?我曾尝试在工作表上输入函数,但下一次数据输入会覆盖该函数

我的2个脚本如下所示:

var StartMileage = SpreadsheetApp.getUi().prompt("Please enter Start Mileage.").getResponseText(); var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Retrieval Log P1CU X") var NewLog = ss.getRange(ss.getLastRow(), 3).setValue( StartMileage ); function promptHome() { var Home = SpreadsheetApp.getUi().prompt("What is your end mileage?").getResponseText(); var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Retrieval Log P1CU X") var NewLog = ss.getRange(ss.getLastRow(), 4).setValue( Home ); var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Retrieval Log P1CU X") var NewLog = ss.getRange(ss.getLastRow(), 9).setValue( new Date() ); } var StartMileage=SpreadsheetApp.getUi().prompt(“请输入起始里程”).getResponseText(); var ss=SpreadsheetApp.getActiveSpreadsheet().getSheetByName(“检索日志P1CU X”) var NewLog=ss.getRange(ss.getLastRow(),3).setValue(startMilage); 以及

var Home=SpreadsheetApp.getUi().prompt(“您的终点里程是多少?”).getResponseText(); var ss=SpreadsheetApp.getActiveSpreadsheet().getSheetByName(“检索日志P1CU X”) var NewLog=ss.getRange(ss.getLastRow(),4).setValue(Home); 我想要的基本总和是“Home”的值减去第10列中的“StartMileage”的值

脚本设置为在点击按钮时运行,在该按钮中他们必须提交响应,第一个按钮将询问他们的姓名和开始里程,最后一个按钮将询问他们的结束里程,按钮将按顺序单击,两个提交将提交到同一行。我希望脚本在提交终点里程的同时进行计算,该函数如下所示:

var StartMileage = SpreadsheetApp.getUi().prompt("Please enter Start Mileage.").getResponseText(); var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Retrieval Log P1CU X") var NewLog = ss.getRange(ss.getLastRow(), 3).setValue( StartMileage ); function promptHome() { var Home = SpreadsheetApp.getUi().prompt("What is your end mileage?").getResponseText(); var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Retrieval Log P1CU X") var NewLog = ss.getRange(ss.getLastRow(), 4).setValue( Home ); var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Retrieval Log P1CU X") var NewLog = ss.getRange(ss.getLastRow(), 9).setValue( new Date() ); } 函数promptHome() { var Home=SpreadsheetApp.getUi().prompt(“您的终点里程是多少?”).getResponseText(); var ss=SpreadsheetApp.getActiveSpreadsheet().getSheetByName(“检索日志P1CU X”) var NewLog=ss.getRange(ss.getLastRow(),4).setValue(Home); var ss=SpreadsheetApp.getActiveSpreadsheet().getSheetByName(“检索日志P1CU X”) var NewLog=ss.getRange(ss.getLastRow(),9).setValue(new Date());
} 添加用于计算的代码,并将计算出的值插入到
promptHome()
函数中。而且不需要像现在在代码中那样获得两次工作表。下面是函数的外观:

function promptHome() {
  var Home = SpreadsheetApp.getUi().prompt("What is your end mileage?").getResponseText();
  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Retrieval Log P1CU X");
  var startMileage = parseInt(ss.getRange(ss.getLastRow(), 3).getValue(), 10);
  var diffMileage = parseInt(Home, 10)-startMileage;
  ss.getRange(ss.getLastRow(), 4).setValue(parseInt(Home, 10));
  ss.getRange(ss.getLastRow(), 9, 1, 2).setValues([[new Date(), diffMileage]]); // insert values into cols 9 and 10 at the same time, so save time
  SpreadsheetApp.flush(); // commit the changes
}

当然,只有当用户只在提示中输入数字时,它才能正常工作。但是,如果您允许他们输入他们想要的任何内容(即“15mi”或“shamalamumu”),并且不验证数据,那么您就有比函数不工作更大的问题:)您还应该在代码中使用,以防止并发数据写入。

基本前提是:获取第3列和第4列的值,进行计算,将结果插入第10列。但具体如何以及何时在脚本中执行此操作将取决于脚本,以及用户如何与脚本交互。您没有提供任何相关信息,例如:用户是同时输入这两个值,还是在不同的时间点输入?以预定义的顺序,还是由他们决定顺序?他们可以只输入一个值而不输入另一个值吗?脚本是在打开时运行还是从附加菜单运行?若要获得beast答案,请将这些详细信息添加到您的问题中以获得最佳答案。感谢@azawaza,我已进行了建议的编辑。感谢@azawaza,很遗憾,这不起作用,错误显示“SpreadsheetApp”未定义。对不起,我只是一个脚本新手,所以不知道这意味着什么。它刚刚在第9列和第10列中输入了日期。哎呀,对不起-最后一行代码中有一个输入错误:had
sreadsheetap
而不是
SpreadsheetApp
。现在更正。错误信息已经消失了,但它仍然只是将日期插入第9列和第10列……还有另一个打字错误!最后一行ss.getRange()应该是:
ss.getRange(ss.getLastRow(),9,1,2).setValues([[new Date(),diffmilies]])答案中的代码已更正。抱歉-显然我不能再打字了…太好了!非常感谢你!