【问题标题】:Google Sheets Concatenate Google Apps ScriptGoogle 表格连接 Google Apps 脚本
【发布时间】:2018-07-31 16:59:36
【问题描述】:

我是 javascript 新手和新手编码员。我一直在尝试为 Google 表格编写一个简单的脚本,以将两列数据连接到另一列:

我下面的脚本运行良好,但仅将 Aaron Ward 生成为 Desired Column C 的第 1 行。我确信我所缺少的确实很简单,但如果有人有时间帮助新手,我将非常感激它。

function concatenate() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var data = sheet.getDataRange().getValues();
  var lr = sheet.getLastRow()
  var values1 = sheet.getSheetValues(1, 1, lr, 1);
  var values2 = sheet.getSheetValues(1, 2, lr, 1);
  var results = [];
  for (var i = 0; i < lr; i++) {
    results = [values1[i] + " " + values2[i]];
    Logger.log(results);
    sheet.getRange(1, 3, results.length).setValues([results]);
  }
}

【问题讨论】:

  • 发生这种情况是因为 1)您总是抓取第 1 行第 3 列,长度为 1 行,以及 2)您在循环中写入,而不是将行数据收集到输出数组中然后写入一旦完成循环。
  • 感谢您的帮助。在循环内写入是主要问题,我让它像这样工作(不确定是否最干净): function concatenate() { var sheet = SpreadsheetApp.getActiveSheet(); var data = sheet.getDataRange().getValues(); var lr = sheet.getLastRow() var values1 = sheet.getSheetValues(1,1,lr,2);记录器.log(values1);变种结果 = []; for (var i=0; i
  • 考虑使用Array#map 和/或Array#join 来简化您的代码/增加其表现力。如果您认为它对其他人有用,也可以随时提交您的固定代码作为答案,或者如果您认为它没有用,请删除该问题

标签: google-apps-script google-sheets


【解决方案1】:

为什么不使用公式?在 C1 中放置公式=JOIN(“ “,A1:B1) 并将其拖到最后一行。

【讨论】:

  • 此工作表从表单响应中填充,当有新的表单响应进来时,它会创建一个新行,并且不会继承之前拖到最后一行的任何公式。
【解决方案2】:

你很亲密。在您的 for 循环中,您需要将 push() 连接的字符串放入您的 results 数组中。然后你可以在for循环之后setValues(results)

function concatenate() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var data = sheet.getDataRange().getValues();
  var lr = sheet.getLastRow()
  var values1 = sheet.getSheetValues(1, 1, lr, 1);
  var values2 = sheet.getSheetValues(1, 2, lr, 1);
  var results = [];
  for (var i = 0; i < lr; i++) {
    results.push([values1[i] + " " + values2[i]]);
  }
  sheet.getRange(1, 3, results.length).setValues(results);
}

【讨论】:

  • Op 在 cmets 中解决 :) (并删除了其中一个双重读取 - 你仍然拥有两个;))
【解决方案3】:

你可以使用这个

function conCat(){
  var ss = SpreadsheetApp.getActiveSpreadsheet()
  var ws = ss.getSheetByName("your sheet name")
  var data = ws.getDataRange().getValues()
  for(var k = 1;k<data.length;k++){
        var row = data[k]
        var merge = row[0]+" "+row[1]
        ws.getRange(k+1,3).setValue(merge)
     }
   } 

此代码将简单地从第一列和第二列中获取值,连接结果将显示在第三列中

【讨论】:

    猜你喜欢
    • 2018-11-16
    • 2018-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多