google-apps-script - 将列值从一个电子表格复制到另一个电子表格,仅添加必要的行
问题描述
我使用此公式将值从一列复制到另一电子表格列:
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 收集值12
,ss.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
?我害怕忘记更改计算值并添加错误的行数。
解决方案
解释:
该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(脚本执行后)
推荐阅读
- maven - 带有阴影的 JavaFX 构建,位置是必需的。它在看哪里?
- java - 根据文本量更改文本编辑的高度
- typescript - 如何修复有关命名空间的 ts lint 错误?
- javascript - 任意图表中的附加或独立 xAxis
- python - 如何使用python正确打印json响应
- linux - Collectd 无法读取 Ansible 发送的配置文件
- c# - 带有 OR 条件的 if 语句逻辑
- javascript - 有没有办法用变量替换 HTML 标签中的值并要求值来构造 html?
- sip - InitialFilterCriteria 中“SessionCase”标签的可能值是什么?
- php - Laravel - 如何通过 laravel api 访问关系