首页 > 解决方案 > 如何获取脚本以将 2 个变量的总和添加到表格中的第三列

问题描述

我有 2 个单独的脚本,询问用户的起始里程(输入到第 3 列)和结束里程(输入到第 4 列)。输入结束里程后,如何将总里程数输入第 10 列?我尝试在工作表上输入一个函数,但它会被下一个数据输入覆盖。

我的 2 脚本如下所示:

var StartMileage = SpreadsheetApp.getUi().prompt("请输入起始里程。").getResponseText();

  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("检索日志 P1CU X")

  var NewLog = ss.getRange(ss.getLastRow(), 3).setValue(StartMileage);

和,

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 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());
}

标签: google-apps-scriptgoogle-sheets

解决方案


添加代码以计算并将计算的值插入到您的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”或“shamalamamumu”)并且不验证数据,那么您遇到的问题比功能无法正常工作更大:) 您还应该在代码中使用锁定服务来防止并发数据写入。


推荐阅读