检查单元格是否有值,如果没有提示对话框,错误中止脚本,如果值,则运行脚本



我在许多论坛上搜索过,找不到这个问题。

我有一个脚本可以将一行从工作表 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';
}

复制前检查空白范围

此函数检查值数组中的空白。 如果发现空白,它会提醒用户,识别空白单元格并终止函数。 否则,它会进行传输并清除某些范围。

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');
}

最新更新