Google apps script 基于值将一行移动到另一行
我正在尝试根据一个单元格(触发器单元格)的值将数据从一个Google工作表选项卡移动到另一个。“触发器”单元格是到特定任务到期日的天数。该值是使用一个简单的代码来计算天数差异的 我在运行代码时遇到一些问题。我有另一张工作表,做了类似的事情,使用相同的代码,它似乎工作得很好。谁能给我一双新的眼睛看看我现在做了什么蠢事?我试图重写它,但仍然有同样的问题 我重写了代码,从互联网上复制粘贴,逐行阅读,我似乎找不到问题所在Google apps script 基于值将一行移动到另一行,google-apps-script,google-sheets,google-sheets-macros,Google Apps Script,Google Sheets,Google Sheets Macros,我正在尝试根据一个单元格(触发器单元格)的值将数据从一个Google工作表选项卡移动到另一个。“触发器”单元格是到特定任务到期日的天数。该值是使用一个简单的代码来计算天数差异的 我在运行代码时遇到一些问题。我有另一张工作表,做了类似的事情,使用相同的代码,它似乎工作得很好。谁能给我一双新的眼睛看看我现在做了什么蠢事?我试图重写它,但仍然有同样的问题 我重写了代码,从互联网上复制粘贴,逐行阅读,我似乎找不到问题所在 function moveToDue() { var UpToDate =
function moveToDue() {
var UpToDate = "Up To Date";
var Due = "Due";
var triggerDue = "21";
var triggerCol = 26;
var url = "https://docs.google.com/spreadsheets/d/blahblahblahblah";
var ss = SpreadsheetApp.openByUrl(url);
var sheet = ss.getSheetByName(UpToDate);
var range = sheet.getActiveCell();
//Move to Due
if (sheet.getName() == UpToDate && range.getColumn() == triggerCol && range.getValue() == triggerDue) {
var targetSheet = ss.getSheetByName(Due);
var targetRange = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
sheet.getRange(range.getRow(), 1, 1, sheet.getLastColumn()).moveTo(targetRange);
sheet.deleteRow(range.getRow());
}
}
数据和到期是不同的选项卡标题
triggerDue是到期日之前需要触发移动的天数(在本例中为21)
triggerCol是触发器值所在的列
工作表副本:
更改这些:
var url=”https://docs.google.com/spreadsheets/d/blahblahblahblah";
var ss=SpreadsheetApp.openByUrl(url)代码>
致:
var ss=SpreadsheetApp.getActive()代码>
这只有在用户打开电子表格时才起作用,因为他们必须选择一行。根据我的测试,在服务器上打开电子表格/工作表时,活动单元格始终为“A1”。更改这些:
var url=”https://docs.google.com/spreadsheets/d/blahblahblahblah";
var ss=SpreadsheetApp.openByUrl(url)代码>
致:
var ss=SpreadsheetApp.getActive()代码>
这只有在用户打开电子表格时才起作用,因为他们必须选择一行。根据我的测试,在服务器上打开电子表格/工作表时,活动单元格始终为“A1”。回答:
存在一些代码问题,包括不正确使用.getActiveCell()
和一些if
和for
逻辑
代码修复:
您的代码中还有一些可以清理的东西-您不需要检查if(sheet.getName()==UpToDate)
,因为您在var sheet=ss.getSheetByName(UpToDate)上设置了这两行代码>不做任何更改
我已经重新编写了很多函数,以使其更高效地运行。另外,.deleteRow()
如果在循环中与moveTo()
一起运行,似乎并不总是有效的,因此我添加了一个函数来清理之后的行
代码:
函数moveToDue(){
var-triggerDue=21;
var-triggerCol=26;
变量url=”https://docs.google.com/spreadsheets/d/blahblahblahblah";
var ss=SpreadsheetApp.openByUrl(url);
var upToDate=ss.getSheetByName(“最新”);
var targetSheet=ss.getSheetByName(“到期”);
var daysUntilEnd=upToDate.getRange(3,26,upToDate.getLastRow()-2).getValues();
对于(var i=0;i<(upToDate.getLastRow()-2);i++){
如果(daysUntilEnd[i][0]回答:
存在一些代码问题,包括不正确使用.getActiveCell()
和一些if
和for
逻辑
代码修复:
您的代码中还有一些可以清理的内容—您不需要检查if(sheet.getName()==UpToDate)
,因为您在var sheet=ss.getSheetByName(UpToDate);
上设置了这两行,而无需更改任何内容
我已经重新编写了很多函数,以使其更高效地运行。此外,.deleteRow()
如果在循环中与moveTo()
一起运行,则似乎并不总是有效,因此我添加了一个函数来清理之后的行
代码:
函数moveToDue(){
var-triggerDue=21;
var-triggerCol=26;
变量url=”https://docs.google.com/spreadsheets/d/blahblahblahblah";
var ss=SpreadsheetApp.openByUrl(url);
var upToDate=ss.getSheetByName(“最新”);
var targetSheet=ss.getSheetByName(“到期”);
var daysUntilEnd=upToDate.getRange(3,26,upToDate.getLastRow()-2).getValues();
对于(var i=0;i<(upToDate.getLastRow()-2);i++){
if(daysUntilEnd[i][0]当你说你有问题时,实际的问题是什么?还有,什么单元格是触发单元格?它曾经改变过吗?它只是不工作。行没有被移动。触发单元格在Z列中。它是一个=DATEDIF公式,用于计算从今天到特定程序结束日期之间的天数。在21天时,程序信息/行应该是从“最新”移至“到期”。因此,当Z列中的一个单元格的值为21时,该行应该被移动。是否可以删除所有个人/敏感数据并共享您的工作表?当然可以:非常感谢。您希望在什么情况下运行此函数?当您说您遇到问题时,实际问题是什么?还有,触发单元格是什么?是吗有没有变化?它只是不起作用。行没有被移动。触发器单元格在Z列中。它是一个=DATEDIF公式,用于计算从今天到特定程序结束日期之间的天数。在21天时,程序信息/行应该从“最新”移到“到期”。因此,当Z列中的单元格的值为21时,该行应该被移动。是否可以删除所有个人/敏感数据并共享您的工作表?当然可以:非常感谢。您希望在什么情况下运行此功能?非常有效!非常感谢您的帮助!非常有效!非常感谢您的帮助!