所以。这应该很简单,我可以做我需要做的事情(= QUERY(MAIN!A:H,“选择A,C,F,其中H ='OPEN'”),但是我无法排序或编辑。因此,我试图制作一个脚本,当H列更改为OPEN时,从“ MAIN”选项卡复制到“ OPEN”选项卡,仅将A,C或F列复制到脚本中,我需要将其放在触发器上,以便信息保留在打开的选项卡上我可以编辑和排序它。问题是。我不太擅长Scripts,我无法弄清楚如何仅执行A列,C列和F列。
https://docs.google.com/spreadsheets/d/11PfKqDhQnBkDM9qIw3CjVUa9-fOTTVg51TzWzHXUo5w/edit?usp=sharing
function CopyDataToNewFile() {
var sourceSheet = SpreadsheetApp.openById('11PfKqDhQnBkDM9qIw3CjVUa9-fOTTVg51TzWzHXUo5w').getSheetByName('MAIN'),
sourceValues = sourceSheet.getRange(4, 1, sourceSheet.getLastRow(), sourceSheet.getLastColumn()).getValues(),
targetSheet = SpreadsheetApp.openById('11PfKqDhQnBkDM9qIw3CjVUa9-fOTTVg51TzWzHXUo5w').getSheetByName('OPEN');
targetSheet.getRange(targetSheet.getLastRow() + 1, 1, sourceValues.length, sourceValues[0].length).setValues(sourceValues);
sourceSheet.getRange(6, 1, sourceSheet.getLastRow(), sourceSheet.getLastColumn())
}
答案 0 :(得分:2)
如果您不希望在编辑MAIN中的“状态”列时脚本自动运行,请改用以下功能:
function CopyDataToNewFile() {
var sourceSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('MAIN');
var values = sourceSheet.getDataRange().getValues();
var targetSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('OPEN');
targetSheet.clear();
for(var i = 1; i < values.length; i++) {
if(values[i][7] == 'OPEN') {
var dataA = values[i][0];
var dataC = values[i][2];
var dataF = values[i][5];
targetSheet.appendRow([dataA, dataC, dataF]);
}
}
}
=======================================
如果您希望每次编辑H列时都运行脚本,请在下面使用它。如果编辑的单元格来自MAIN的H列,则脚本不执行任何操作,因此不必担心OPEN中的编辑会更改MAIN的数据。
所有数据都将复制到“打开”选项卡的前三列。另外,在复制之前,“打开”选项卡中的所有先前数据都将被删除:
function onEdit(e) {
var sourceSheet = e.source.getActiveSheet();
var sheet_name = sourceSheet.getName();
var column = e.range.getColumn();
if(sheet_name == 'MAIN' && column == 8) {
var values = sourceSheet.getDataRange().getValues();
CopyDataToNewFile(values);
}
}
function CopyDataToNewFile(values) {
var targetSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('OPEN');
targetSheet.clear(); // This clears previous data in OPEN tab, delete this line if you don't want this to happen.
// Looping through each row in MAIN tab
for(var i = 1; i < values.length; i++) {
// Checking if column H value is 'OPEN'
if(values[i][7] == 'OPEN') {
// Getting values from A, C, F columns
var dataA = values[i][0];
var dataC = values[i][2];
var dataF = values[i][5];
targetSheet.appendRow([dataA, dataC, dataF]);
}
}
}
我希望这是您想要做的,对于我误解了您的意图感到抱歉。