google-apps-script - 如何在 Google 表格的 3 张表格之间有条件地移动行?
问题描述
我在工作表上有一个任务列表,我一直在尝试找到一种简单的方法,根据一列中的状态(例如空白、已完成、已付款)将带有任务的行移动到不同的工作表。例如,第 2 行的任务被标记为“完成”。然后我需要删除该行并将其移至标有“完成”的工作表。从那里,当任务被支付时,我需要从“完成”选项卡中删除该行到“付费”选项卡。
我找到了一些代码,允许我为 1 行执行一次此操作,但它不会重复它下面的行。这是我一直在使用的代码:
function ConditionalShimmy2(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet1 = ss.getSheetByName('not done');
var sheet2 = ss.getSheetByName('done');
var sheet3 = ss.getSheetByName('paid');
var cell = sheet1.getRange("f2:f277").getCell(1, 1);
var rowtoInsert = "2:277";
if(cell.getValue() == "done")
{
sheet2.insertRows(2);
var range2 = sheet2.getRange(2 ,1,1,sheet1.getLastColumn());
sheet1.getRange(cell.getRow(),1, 1, sheet1.getLastColumn()).copyTo(range2);
sheet1.deleteRow(cell.getRow());
}
}
谁能帮我完成这段代码并让我知道我哪里出错了?
解决方案
为了完成您的任务,您可以尝试以下适合您情况的建议解决方案。
片段
function ConditionalShimmy2() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var main = ss.getSheetByName("THE_NAME_OF_THE_MAIN_SHEET");
var sheet1 = ss.getSheetByName("not done");
var sheet2 = ss.getSheetByName("done");
var sheet3 = ss.getSheetByName("paid");
var taskNames = main.getRange(row, column, numRows, numColumns).getValues();
var taskStatus = main.getRange(row, column, numRows, numColumns).getValues();
var rowsDeleted = 0;
for (var i = 0; i < taskStatus.length; i++) {
if (taskStatus[i][0] == "not done") {
sheet1.appendRow([taskNames[i][0]]);
main.deleteRow((i + 1) - rowsDeleted);
rowsDeleted++;
} else if (taskStatus[i][0] == "done") {
sheet2.appendRow([taskNames[i][0]]);
main.deleteRow((i + 1) - rowsDeleted);
rowsDeleted++;
} else if (taskStatus[i][0] == "paid") {
sheet3.appendRow([taskNames[i][0]]);
main.deleteRow((i + 1) - rowsDeleted);
rowsDeleted++;
}
}
}
解释
上面的代码片段循环遍历所有任务及其相关状态,并基于status
列,然后利用该方法将每一行附加到适当的工作表,然后利用该方法从工作表中appendRow()
删除。main
deleteRow()
笔记
为了使上述代码片段适合您的情况,您必须自定义与和getRange
关联的方法的参数。因此,, , ,参数表示在给定坐标处左上单元格和给定行数和列数的范围。taskNames
taskStatus
row
column
numRows
numColumns
参考
推荐阅读
- uwp - UWP 按钮在可见性变化时淡入,使用什么触发器?
- r - 如何用R删除括号内的数字?
- sql - 保持结果数据与插入的顺序相同
- amazon-web-services - 使用 javascript 将 AWS Lex 音频集成到网站
- android - 在不完成结果发射活动的情况下从活动中获取结果并再次显示数据以进行编辑的最佳方法?
- javascript - 未安装节点 v8.2.0(64 位)
- android - 在现有项目中颤振
- ruby-on-rails - 在rails中两个或更多模型之间的索引处显示数据
- javascript - 如何使用 javascript 承诺使一个函数等待另一个函数完成异步运行?
- c++ - 在代码中间使用#include 不好吗?