Google 脚本:根据值将行从一个 sheet 复制到另一个
Google Script: Copy row from one sheet to another depending on value
虽然我看过类似的问题,但如果我没记错的话,我没有看到这个具体的问题。
所以,我需要阅读特定列中的所有信息(在这种情况下,它将是 AF,无论我是否一直在使用该传播sheet 来尝试我一直在做的事情)然后检查该列中的单元格是否具有值(或字符串,对不起 Google 脚本的新功能)“已完成”,然后将与该单元格对应的整行复制到辅助 sheet,它将存储所有完成的案例和东西。
我一直试图通过 google 找到一些东西,但它总是如何复制整个 sheet,我认为这没有用,而且我所做的 rn 复制单元格,无论值是多少在那个单元格+列
function copyIf() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var source = ss.getSheetByName("Stuff");
var destination = ss.getSheetByName("Terminados");
var condition = source.getRange('D2:D2000').getValue();
if (condition == "Terminado") {
source.getRange('A2').copyTo(destination.getRange('A2'));
source.getRange('A3').copyTo(destination.getRange('A3'));
}
}
我想我可能应该实施某种 for 或 while 循环,因为我希望它 运行 不断地所以每当有人将某个单元格的状态更改为 Terminado 以将该行复制到辅助 sheet.
试试这个
function copyIf() {
var feuille = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Stuff");
var archive = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Terminados");
if (feuille.getLastRow()==1){
SpreadsheetApp.getActive().toast('No data!', 'End of script ️')
return
}
var data = feuille.getRange(2,1,feuille.getLastRow()-1,feuille.getLastColumn()).getValues()
var archiveData = []
var lignes = []
var ligne = 1
var col = 31 // AF
try {
data.forEach(function (row) {
if (row[col]=="Terminado") {
archiveData.push(row)
lignes.push(ligne)
}
})
archive.getRange(archive.getLastRow() + 1, 1, archiveData.length, archiveData[0].length).setValues(archiveData)
// lignes.reverse().forEach(x => feuille.deleteRow(x));
SpreadsheetApp.getActive().toast('Rows '+lignes.flat()+' hab been archived !', 'End of script ️')
} catch (e) {
SpreadsheetApp.getActive().toast('No data to be archived!', 'End of script ️')
}
}
如果要在处理后删除行,请在 lignes.reverse().forEach(x => feuille.deleteRow(x));
之前删除 //
虽然我看过类似的问题,但如果我没记错的话,我没有看到这个具体的问题。
所以,我需要阅读特定列中的所有信息(在这种情况下,它将是 AF,无论我是否一直在使用该传播sheet 来尝试我一直在做的事情)然后检查该列中的单元格是否具有值(或字符串,对不起 Google 脚本的新功能)“已完成”,然后将与该单元格对应的整行复制到辅助 sheet,它将存储所有完成的案例和东西。
我一直试图通过 google 找到一些东西,但它总是如何复制整个 sheet,我认为这没有用,而且我所做的 rn 复制单元格,无论值是多少在那个单元格+列
function copyIf() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var source = ss.getSheetByName("Stuff");
var destination = ss.getSheetByName("Terminados");
var condition = source.getRange('D2:D2000').getValue();
if (condition == "Terminado") {
source.getRange('A2').copyTo(destination.getRange('A2'));
source.getRange('A3').copyTo(destination.getRange('A3'));
}
}
我想我可能应该实施某种 for 或 while 循环,因为我希望它 运行 不断地所以每当有人将某个单元格的状态更改为 Terminado 以将该行复制到辅助 sheet.
试试这个
function copyIf() {
var feuille = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Stuff");
var archive = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Terminados");
if (feuille.getLastRow()==1){
SpreadsheetApp.getActive().toast('No data!', 'End of script ️')
return
}
var data = feuille.getRange(2,1,feuille.getLastRow()-1,feuille.getLastColumn()).getValues()
var archiveData = []
var lignes = []
var ligne = 1
var col = 31 // AF
try {
data.forEach(function (row) {
if (row[col]=="Terminado") {
archiveData.push(row)
lignes.push(ligne)
}
})
archive.getRange(archive.getLastRow() + 1, 1, archiveData.length, archiveData[0].length).setValues(archiveData)
// lignes.reverse().forEach(x => feuille.deleteRow(x));
SpreadsheetApp.getActive().toast('Rows '+lignes.flat()+' hab been archived !', 'End of script ️')
} catch (e) {
SpreadsheetApp.getActive().toast('No data to be archived!', 'End of script ️')
}
}
如果要在处理后删除行,请在 lignes.reverse().forEach(x => feuille.deleteRow(x));
//