【问题标题】:Get data next to eachother获取彼此相邻的数据
【发布时间】:2018-12-19 11:17:42
【问题描述】:

我制作了一个脚本,用于从谷歌表格发送批量电子邮件。 但是我偶然发现了一个问题。 出于某种原因,我无法将下面的数据放在一起。

var open = row[1] + row[2] + row[3]

您会在下面找到一份 google 表格列表。 我在 ID 号上使用 vlookup 将该数据插入到学生/邮件地址的消息旁边。

在我的消息中,我有一个介绍(你好学生等) 之后,他们会得到(或应该得到)他们的积分列表。

var message = introduction + '\n\n' + open  + '\n\n\n' + ending; // setup of the mail

但是,当他们收到邮件时,它看起来像这样

Sarah
Sarah
Chemistry
Maths
9,5
6,0

有没有办法在每个旁边获取这些数据? 喜欢 \n 的新段落。

提前致谢

编辑: 它应该是这样的。

Sarah     Maths         9,5
Sarah     Chemistry     6,0

编辑2:

我用来合并列的宏

function merge_col() {
  var ss = SpreadsheetApp.getActive().getSheetByName('Open invoices');
  var data = ss.getDataRange().getValues();
  var header = data.shift();
  var col1 = data[1][0];
  var col2 = '';
  var col3 = '';
  var col4 = '';
  var dataSheet2 = [header];
  for(var i=0 ; i<data.length ; i++){
    Logger.log(data[i][0]+'  -  '+col1+'  -  '+data[i][2])
    if(col1==data[i][0]){
      col1 = data[i][0];
      col2+=data[i][1]+'\n';
      col3+=data[i][2]+'\n';
      col4+=data[i][3]+'\n';
    }else{
      dataSheet2.push([col1,col2,col3,col4]); 
      var col1 = data[i][0];
      col2 = data[i][1]+'\n';
      col3 = data[i][2]+'\n';
      col4 = data[i][3]+'\n';
    }
  }
  dataSheet2.push([col1,col2,col3,col4]); 
  Logger.log(dataSheet2);
  var sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet3');
  sheet2.clear();
  sheet2.getRange(1, 1, dataSheet2.length, dataSheet2[0].length).setValues(dataSheet2);
}

【问题讨论】:

  • 这是因为每个单元格的内容都包含一个换行符。您将需要细分具有多行内容的每个单元格,并更新您的处理以添加前半部分以及同一行中的任何整体。
  • @TheMaster :我在帖子中添加了一个编辑,它应该看起来像 tehhowch 的评论是正确的。有没有办法将这 3 行的范围作为表格复制到邮件中?
  • 是的,细分每个单元格,在内部换行符处拆分字符串内容。如果您的数据结构没有内部换行符,而是为每个重复的类 ID 设置单独的行,您会更轻松。
  • @tehhowch:我对细分单元格的问题是我只得到第一个值。如果我要搜索莎拉,我只会得到她的数学数字。如果我搜索 Sarah,我应该将她的所有号码和该表复制到 Gmail 中。
  • @TheMaster 最初划分单元格1 个 ID 将只有 1 行而不是多行

标签: google-apps-script google-sheets gmail


【解决方案1】:

拼接行

代码:

function splicingRows(){
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getActiveSheet();
  var rg=sh.getDataRange();
  var vA=rg.getValues();
  for(var i=0;i<vA.length;i++){
    var maxrh=1;
    for(var j=0;j<vA[i].length;j++){//calculate max needed row height to fit all strings that are delimited with linefeeds
      if(vA[i][j]){
        var rh=vA[i][j].toString().split('\n').length;
        if(rh>maxrh){
          maxrh=rh;
        }
      }
    }
    var r=maxrh;
    if(r>1){//splice in the number of extra rows to fit the extra strings
      while(r>1){
        var vB=vA[i].slice();//dont forget the slice so that they are not the same array they need to be copies
        vA.splice(i,0,vB);
        r--;
      }
      r=maxrh;
      while(r>0){
        var k=maxrh-r
        for(var j=0;j<vA[i].length;j++){
          if(vA[i+k][j].toString().split('\n').length>1){//if there is more than one string then adjust the contents
            if(r<=vA[i+k][j].toString().split('\n').length){
              vA[i+k][j]=vA[i+k][j].toString().split('\n')[r-1];
            }else{
               vA[i+k][j]=null;
            }
          }else{
            vA[i+k][j]=vA[i+k][j];//if there is only one then just copy it.
          }
        }
        r--;
      }
    }

  }
  sh.getRange(1,1,vA.length,vA[0].length).setValues(vA);//replace the entire page all at one time
}

之前:

之后:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-17
    • 2020-11-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多