проверьте, имеет ли ячейка значение, если нет, диалоговое окно с сообщением об ошибке сценария отмены, если значение, затем запустите сценарий - PullRequest
1 голос
/ 19 апреля 2019

Я уже искал на многих форумах и не смог найти эту проблему.

У меня есть скрипт, который перемещает строку с листа 1 на лист 2.

Что я пытаюсь сделатьДостигается то, что когда конкретная ячейка из листа 1 забыта и оставлена ​​пустой.

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

Я надеюсь, что вы можете указать направление или нить, где есть похожий вопрос.

У меня недостаточно знаний, чтобы объединитьдиалоговое окно с проверкой объединить его с тем, что я получил сейчас:

function Moverows5() { 
  var ss = SpreadsheetApp.openById('sheetID');
  var sourceSheet = ss.getSheetByName("sheetname1");
  var targetSheet = ss.getSheetByName("sheetname 2");
  var values = sourceSheet.getRange("B8:T43").getValues();
  var range0 = sourceSheet.getRange("C8:K43");
  var range1 = sourceSheet.getRange("Q8:T43");
  var range2 = sourceSheet.getRange("P2");
  var range3 = sourceSheet.getRange("R2");
  var firstFreeRow = goToFirstRowAfterLastRowWithData(targetSheet, "A:AD"); 
  //check column to whatever column you want to check 
  targetSheet.getRange(firstFreeRow, 1, values.length, values[0].length)      .setValues(values);
  range0.clearContent();
  range1.clearContent();
  range2.clearContent();
  range3.clearContent();
  createPdf()//function gets started
} //end of first function

function goToFirstRowAfterLastRowWithData(sheet, range) {
  var v = sheet.getRange(range).getValues(),l = v.length,r;
  while (l > 0) {
    if (v[l] && v[l][0].toString().length > 0) {
      r = (l + 2);
      break;
    } else {
      l--;
    }
  }
  return r ? r : 'no data found';
}

1 Ответ

0 голосов
/ 20 апреля 2019

Проверка диапазона на наличие пробелов перед копированием

Эта функция проверяет массив значений на наличие пробелов.Если пробелы обнаружены, это предупреждает пользователя, идентифицирует пустые ячейки и завершает функцию.В противном случае он выполняет передачу и очищает некоторые диапазоны.

function Moverows5() { 
  var ss=SpreadsheetApp.getActive();
  var sourceSheet=ss.getSheetByName("Sheet1");
  var targetSheet=ss.getSheetByName("Sheet2");
  var sourceRange=sourceSheet.getRange("B8:T43");
  var values=sourceRange.getValues();
  var range0=sourceSheet.getRange("C8:K43");
  var range1=sourceSheet.getRange("Q8:T43");
  var range2=sourceSheet.getRange("P2");
  var range3=sourceSheet.getRange("R2");
  var firstFreeRow=targetSheet.getLastRow() + 1; 
  var noBlanks=true;
  var bA=[];
  var ro=sourceRange.getRow();
  var co=sourceRange.getColumn();
  for(var ri=0;ri<values.length;ri++) {
    for(var ci=0;ci<values[ri].length;ci++) {
      if(!values[ri][ci]) {
        noBlanks=false;
        bA.push(sourceSheet.getRange(ri+ro,ci+co).getA1Notation());
      }
    }
  }
  if(noBlanks) {
    targetSheet.getRange(firstFreeRow,1,values.length,values[0].length).setValues(values);  
    range0.clearContent();
    range1.clearContent();
    range2.clearContent();
    range3.clearContent();
    //createPdf()//function gets started
  }else{
    SpreadsheetApp.getUi().alert('Sorry there are blanks in the following cells: ' + bA.join(', '));
    return;
  }
}

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

function createTestData() { 
  var m=1;//0 for random column positions >0 for fixed position
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getActiveSheet();
  sh.clearContents();
  var cols=30;//number of columns
  var rows=50;//number of rows
  var hpref='hdr';
  var hA=[];
  var hdrA=[];
  var cA=[];
  for(var i=0;i<cols;i++) {hA.push(i+1);};
  for(var i=0;i<cols;i++) {
    if(m==0) {
      var index=Math.floor(Math.random() * hA.length);
    }else{
      var index=i;
    }  
    var hnum=hA[index];
    hdrA.push(hpref + hnum);
    cA.push(hnum);
    if(m==0) {
      hA.splice(index,1);
    }
  }
  sh.getRange(1,1,1,hdrA.length).setValues([hdrA]);    
  var rg=sh.getRange(2,1,rows,cols);  
  var vA=rg.getValues();
  for(var i=0;i<rows;i++) {
    for(var j=0;j<cols;j++) {
      vA[i][j]=Number(i+1) + ',' + cA[j];
    }
  }
  rg.setValues(vA);
  sh.getRange("B8:T43").setBackground('#ff00ff');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...