Как я могу выполнять действия на листе A, проверяя значение ячейки, если оно существует, и использовать его в качестве ключа для пропуска при следующем выполнении, поскольку оно уже было обработано? - PullRequest
0 голосов
/ 09 июля 2020

Простите за базовый c вопрос, но после 15 попыток с разными вариантами я пришел сюда с этим .. Полный код ниже, но следующий оператор

    if (data[i][11] <> "YES") 

, похоже, не выполняется должным образом в любом из различных методов, которые я пробовал, я уверен, что делаю что-то не так где-то еще в этом сценарии, но, хоть убей, не вижу этого. Надеюсь, что новый набор глаз может помочь ...

Я пытаюсь собрать данные на листе A, обработать их и поместить на лист B и обновить ключ на листе A. Если скрипт запускается снова, он не должен забирать уже обработанные элементы Листа А (через Ключ - в настоящее время в 12-м столбце и обозначено как «ДА»). В каждом случае сценарий продолжал обрабатывать все строки независимо от того, является ли он, что наводит меня на мысль, что на самом деле это не те условия, которые я предоставляю ...

Надеюсь, это ясно. Оцените любой пу sh в нужном направлении.

Еще одна из попыток:

var jiraupdated = data[i][11]; 
if (jiraupdated !== UPDATED)
//and various similar replacing with different types, methods, etc.

Полный скрипт:

var UPDATED = "YES";

function formatJIRASheet() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var lastRow = sheet.getLastRow();
  var startRow = 2; // First row of data to process
  var numRows = lastRow-1; // Number of rows to process
  // Fetch the range of cells
  var dataRange = sheet.getRange(startRow, 1, numRows, lastRow); //rowCount for data
  // Fetch values for each row in the Range.
  var data = dataRange.getValues();
  var ss=SpreadsheetApp.getActive();
  
  var sh1=ss.getSheetByName('JIRA Sheet');

  for (var i = 0; i < data.length; ++i) {
    // Fetch values on initial data
    var row = data[i];
    var date = row[1]; // 2nd col
    var customername = row[2]; //3rd col
    var test = row[3]; 
    var testt = row[4];
    var summary = row[5];
    var actualoutcome = row[6];
    var exptoutcome = row[7];
    var customeremail = row[8];    
    // Form new description (merge of other fields) 
    var description = (date + " " + dftdescription + " " + test + " " + testt + " " + actualoutcome + " " + exptoutcome); // target col 2
                        
    
    // This is the failing check, continuing to write records to next sheet even though they've already been covered in previous runs.  I've tried maybe 15 different methods to fix this and have came up short.  
    if (data[i][11] <> "YES") { 
      sh1.appendRow([null, "Bug", null, summary, description, customeremail, customername, null, null, null, null, null, "Low", "Low", null, null, null, null, null]); 
      sheet.activate();
      sheet.getRange(startRow + i, 12).setValue(UPDATED);
      // Make sure the cell is updated right away in case the script is interrupted
      SpreadsheetApp.flush();
    }

1 Ответ

1 голос
/ 09 июля 2020

Попробуйте следующее:

function formatJIRASheet() {
  const ss=SpreadsheetApp.getActive();
  const sh=ss.getSheetByName('Sheet1');
  const sr=2;
  const rg=sh.getRange(sr,1,sh.getLastRow()-sr+1,sh.getLastColumn());
  const v=rg.getValues();
  const sh1=ss.getSheetByName('Sheet2');
  v.forEach(function(row,i){
    var date=row[1];
    var customername=row[2];
    var test=row[3]; 
    var testt=row[4];
    var summary=row[5];
    var actualoutcome=row[6];
    var exptoutcome=row[7];
    var customeremail=row[8];    
    var description=(date + " " + "undefined" + " " + test + " " + testt + " " + actualoutcome + " " + exptoutcome);
    if(row[11]!="YES") { 
      sh1.appendRow(['',"Bug",'',summary,description,customeremail,customername,'','','','','',"Low","Low",'','','','','']); 
      sh.getRange(sr + i, 12).setValue("YES");
    }
  });
  SpreadsheetApp.flush();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...