首页 > 解决方案 > 将列值从一个电子表格复制到另一个电子表格,仅添加必要的行

问题描述

Sheet 1/Sheet 2
在此处输入图像描述 在此处输入图像描述

我使用此公式将值从一列复制到另一电子表格列:

function SheetToSheet() {
  var sss = SpreadsheetApp.openById('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA');
  var ss = sss.getSheetByName('Sheet 1');
  var range = ss.getRange(12,1,ss.getMaxRows()+1-12,1);
  var data = range.getValues();
  var tss = SpreadsheetApp.openById('BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB');
  var ts = tss.getSheetByName('Sheet 2');
  ts.getRange(12,1, data.length, data[0].length).setValues(data);
}

在这种情况下,我想从 line 收集值12ss.getMaxRows()+1-12以防万一需要在另一个电子表格中添加行,它只会根据需要添加尽可能多的行。

结果:
Add Row 11, 12, 13, 14 and 15
Add Values in Row 12, 13, 14 and 15
在此处输入图像描述

如果我使用getlastrow(),则会添加更多不必要的行:

在此处输入图像描述

如果我使用getMaxRows()不计算+1-NumberOfRows,它总是复制比需要更多的行:

在此处输入图像描述

是否有一个固定模型并不总是需要放置 calc +1-NumberOfRows?我害怕忘记更改计算值并添加错误的行数。

标签: google-apps-scriptgoogle-sheets

解决方案


解释:

setValues函数将添加绝对必要的行数,以便数据适合。它不会删除错误,也不会添加超出需要的行数。

假设您要从目标工作表中的第 1 行开始粘贴,并且要粘贴 10 行数据,但目标工作表只有 6 行。该setValues函数将创建更多行,以便您的数据完全适合。

最小可重现示例:

表 1

假设您有 10 行数据Sheet1

在此处输入图像描述

表 2

Sheet2只有 6 行可用:

在此处输入图像描述

如果您运行此代码:

function myFunction() {
  const ss = SpreadsheetApp.getActive();
  const sh1 = ss.getSheetByName('Sheet1');
  const sh2 = ss.getSheetByName('Sheet2');
  const data = sh1.getRange('A1:A10').getValues();
  sh2.getRange(1,1,data.length,data[0].length).setValues(data);
}

setValues将完成这项工作并添加适合数据所需的绝对必要的行。

Sheet2(脚本执行后)

在此处输入图像描述


推荐阅读