如何获取脚本以将 2 个变量的总和添加到表格中的第三列

Posted

技术标签:

【中文标题】如何获取脚本以将 2 个变量的总和添加到表格中的第三列【英文标题】:How to get a Script to add the sum of 2 variables to a 3rd column in Sheets 【发布时间】:2018-11-12 20:04:27 【问题描述】:

我有 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' 的值。

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

函数 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());

【问题讨论】:

基本前提是:获取 col 3 和 col 4 的值,进行计算,将结果插入 col 10。但在脚本中如何以及何时执行此操作将取决于您的脚本,以及用户如何与之交互。您没有提供任何相关信息,例如:用户是同时输入两个值,还是在不同时间点输入?以预定义的顺序还是由他们决定?他们可以只输入一个值而不输入另一个值吗?您的脚本是在 onOpen 上运行还是从附加菜单运行?要获得最佳答案,请将这些详细信息添加到您的问题中以获得最佳答案。 谢谢@azawaza,我已经做了建议的修改。 【参考方案1】:

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

【讨论】:

谢谢,@azawaza,不幸的是这不起作用,错误提示“SpreadsheetApp”未定义。抱歉,我只是脚本的新手,所以不确定这意味着什么。它刚刚在第 9 列和第 10 列中输入了日期。 糟糕,抱歉 - 最后一行代码中的错字:SreadsheetApp 而不是 SpreadsheetApp。现已更正。 错误信息现已消失,但仍只是将日期插入第 9 列和第 10 列。 ...还有一个错字!最后 ss.getRange() 行应该是:ss.getRange(ss.getLastRow(), 9, 1, 2).setValues([[new Date(), diffMileage]]); 答案中的代码已更正。抱歉 - 显然我不能再打字了... 太好了!非常感谢!

以上是关于如何获取脚本以将 2 个变量的总和添加到表格中的第三列的主要内容,如果未能解决你的问题,请参考以下文章

如何通过读取shell脚本中的csv文件来将2列的总和添加到新列中

如何使用 Google Apps 脚本将公式添加到 Google 表格?

添加一行的 Google 表格脚本

如何编写执行预定义查询以将数据加载到工作表中的办公脚本?

使用 awk 从文件或 EV 中获取环境变量以将其用作 EV

HTML 表单 - 添加新表格行并将焦点设置在第一个输入上的脚本