Javascript 如何不将空白列转移到母版页?

Javascript 如何不将空白列转移到母版页?,javascript,google-apps-script,google-sheets,transfer,Javascript,Google Apps Script,Google Sheets,Transfer,在添加“if”之前,此代码可以正常工作。“如果”应防止将第2列中没有数据的行传输到主工作表。如何使没有数据的数据阻止传输 function combineSheets() { var sApp = SpreadsheetApp.getActiveSpreadsheet(); var s1= sApp.getSheetByName("January"); var s2= sApp.getSheetByName("February");

在添加“if”之前,此代码可以正常工作。“如果”应防止将第2列中没有数据的行传输到主工作表。如何使没有数据的数据阻止传输

    function combineSheets() {
  var sApp = SpreadsheetApp.getActiveSpreadsheet();
  var s1= sApp.getSheetByName("January");
  var s2= sApp.getSheetByName("February");
  var s3= sApp.getSheetByName("March");
  var s4= sApp.getSheetByName("April");
    var s5= sApp.getSheetByName("May");
  var s6= sApp.getSheetByName("June");
  var s7= sApp.getSheetByName("July");
  var s8= sApp.getSheetByName("August");
    var s9= sApp.getSheetByName("September");
  var s10= sApp.getSheetByName("October");
  var s11= sApp.getSheetByName("November");
  var s12= sApp.getSheetByName("December");
  var s13= sApp.getSheetByName("Master");
 

  var s1values = s1.getRange(1,2,s1.getLastRow(),27).getValues();
  var s2values = s2.getRange(1,2,s2.getLastRow(),27).getValues();
  var s3values = s3.getRange(1,2,s3.getLastRow(),27).getValues();
    var s4values = s4.getRange(1,2,s4.getLastRow(),27).getValues();
  var s5values = s5.getRange(1,2,s5.getLastRow(),27).getValues();
  var s6values = s6.getRange(1,2,s6.getLastRow(),27).getValues();
    var s7values = s7.getRange(1,2,s7.getLastRow(),27).getValues();
  var s8values = s8.getRange(1,2,s8.getLastRow(),27).getValues();
  var s9values = s9.getRange(1,2,s9.getLastRow(),27).getValues();
    var s10values = s10.getRange(1,2,s10.getLastRow(),27).getValues();
  var s11values = s11.getRange(1,2,s11.getLastRow(),27).getValues();
  var s12values = s12.getRange(1,2,s12.getLastRow(),27).getValues();
  var sourceData  =  s1values.concat(s2values,s3values,s4values,s5values,s6values,s7values,s8values,s9values,s10values,s11values,s12values);

 
    for (var i in sourceData) {
  if (sourceData[i][1] !== null && sourceData[i][1] !== '') {
    targetData.push(sourceData[i]);
  }

  var s13values = [];
  s13values =  s1values.concat(s2values,s3values,s4values,s5values,s6values,s7values,s8values,s9values,s10values,s11values,s12values);
  s13.getRange(1,1,s13values.length,27).setValues(s13values);
}
说明: 我相信您的目标是将每个月工作表中的数据传输到
工作表中,但列
B
为空的行除外

  • 迭代工作表,从第二列获取数据,直到第27列,直到最后一行包含相应工作表的内容

  • 输出列
    B
    为空的行。请记住,您的范围从列
    B
    开始,因此就JavaScript而言,values数组的
    zero
    元素对应于列
    B
    的值:

    sh.getRange(1,2,sh.getLastRow(),27).getValues().filter(r=>r[0]!='');
    
  • 用于确保正确连接值

  • 我还改进了代码的性能,但也使其更容易修改,例如更改一些范围参数等

解决方案:
非常感谢你!!它成功了,但现在我有两个新问题。1.如何按2项进行排序?我需要按个人及其状态(即已完成)进行排序。在状态单元格中还有一个日期,我只想让它找到已完成的部分。2.如果状态已完成,如何跳过?这两种方法都适用于已合并的页面。希望这有意义。@retter4242很高兴它解决了您的问题。通过点击答案左边的嘀嗒按钮来接受答案。不幸的是,stackoverflow不允许后续问题,因此您可能会发布有关后续修改的新问题。很抱歉给您带来不便,明白了。我将发布一篇后续文章,希望你也能提供帮助。谢谢行。我明天吃点东西
function combineSheets() {
  const sApp = SpreadsheetApp.getActiveSpreadsheet();
  const months = ['January','February','March','April','May','June','July',
                 'August','September','October','November','December'];  
  const master = sApp.getSheetByName('Master');           
  const sourceData = [];
  months.forEach(m=>{
     let sh = sApp.getSheetByName(m);
     let vals = sh.getRange(1,2,sh.getLastRow(),27).getValues().filter(r=>r[0]!='');
       sourceData.push(...vals);
  });
  master.getRange(1,1,sourceData.length,sourceData[0].length).setValues(sourceData);
}