如何获取脚本以将 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 表格?