【问题标题】:Delete blank rows in spreadsheet using Google script使用 Google 脚本删除电子表格中的空白行
【发布时间】:2015-04-14 11:38:46
【问题描述】:

Spreadsheet-1:Spreadsheet-1 中存在的数据,

Name     apple  android   windows    linux
Germany    3      4         6          7
America    4      1         6          2
Sweden     1      6         1          6
Paris      5      0         2          4

Spreadsheet-2:Spreadsheet-2 中的数据,

Date   Name    apple  android   windows    linux

我可以使用以下 google 脚本将数据从电子表格 1 复制到电子表格 2。

function Daily() {
  var SpreadSheetKeyA = "mykey1";
  var SpreadSheetKeyB = "mykey2";
  var sheet1 = SpreadsheetApp.openById(SpreadSheetKeyA).getSheetByName("Showstopper");
  var sheet2 = SpreadsheetApp.openById(SpreadSheetKeyB).getSheetByName("Daily");
  var data = sheet1.getRange(5,11,40,6).getValues();
  var time = new Date ().toJSON().slice(0,10);;
  for (var r = 0; r < data.length; r++) {
    data[r].unshift(time);
    sheet2.appendRow(data[r]);
    }
}

电子表格 1 中的数据是动态的,即行数可以变化。现在,每当我再次运行脚本以更新电子表格 2 数据时,都会在空白行之后附加数据。我想增强上面的脚本,以便它应该避免空白行或只复制带有数据的行。

谁能帮我解决这个问题

【问题讨论】:

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


    【解决方案1】:

    如果所有空白都在源的底部并且数据下方没有其他内容,这应该可以工作。

    function triggerOnTime() {
      var SpreadSheetKeyA = "MY key";
      var SpreadSheetKeyB = "MY key";
      var sheet1 = SpreadsheetApp.openById(SpreadSheetKeyA).getSheetByName("Source Name");
      var sheet2 = SpreadsheetApp.openById(SpreadSheetKeyB).getSheetByName("Target Name");
      var startRow = 5;
      var data = sheet1.getRange(startRow,11,sheet1.getLastRow() - startRow + 1,5).getValues();
      var time = new Date ().toJSON().slice(0,10);;
      for (var r = 0; r < data.length; r++) {
        data[r].unshift(time);
        }
      if(data.length > 0 ) {
        sheet2.insertRowsAfter(sheet2.getLastRow(), data.length);
        sheet2.getRange(sheet2.getLastRow()+1, 1, data.length, data[0].length).setValues(data);
        }
    }
    

    如果由于某种原因无法满足上述条件并且您需要将行数硬编码为 40,您可以尝试以下操作:

    function triggerOnTime() {
          var SpreadSheetKeyA = "MY key";
          var SpreadSheetKeyB = "MY key";
          var sheet1 = SpreadsheetApp.openById(SpreadSheetKeyA).getSheetByName("Source Name");
          var sheet2 = SpreadsheetApp.openById(SpreadSheetKeyB).getSheetByName("Target Name");
          var startRow = 5;
          var data = sheet1.getRange(5,11,40,6).getValues();
          var time = new Date ().toJSON().slice(0,10);;
          for(var i = data.length - 1; i > -1; i--) {
            if(data[i].join("").length == 0) data.splice(i, 1);
          }
          for (var r = 0; r < data.length; r++) {
            data[r].unshift(time);
            }
      if(data.length > 0 ) {
        sheet2.insertRowsAfter(sheet2.getLastRow(), data.length);
        sheet2.getRange(sheet2.getLastRow()+1, 1, data.length, data[0].length).setValues(data);
        }
        }
    

    【讨论】:

    • 使用上述脚本后,数据被复制到 sheet2,但日期列与日期戳一起折叠到第 235 行,即使数据只存在到第 11 行。
    • 你用的是上面那个还是下面那个版本?
    • 您必须在尝试提取的数据下方的单元格中输入数据。尝试使用代码的底层版本,看看是否适合您。
    • 你能帮我解决另一个问题吗,[stackoverflow.com/questions/29673020/…
    猜你喜欢
    • 1970-01-01
    • 2014-11-10
    • 1970-01-01
    • 2016-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多