表格脚本可根据单元格值

时间:2019-10-10 04:51:42

标签: google-apps-script google-sheets spreadsheet google-sheets-api google-sheets-formula

所以。这应该很简单,我可以做我需要做的事情(= 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())

}

1 个答案:

答案 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]);    
    }
  }
}

我希望这是您想要做的,对于我误解了您的意图感到抱歉。