[英]Google Apps Script: How do I pull data entered today from one spreadsheet and transpose it to another?
[英]Pull data from one Google spreadsheet to another using Google script
我的云端硬盘中有2个电子表格。 我想从1个电子表格的单元格中提取数据,然后将其复制到另一个电子表格中。 电子表格“ TestUsage”有时会在A列中包含数据,但B列中没有。在我打开电子表格时,它将在工作表“ TestParts”中的工作表“ TestUsage”中填充该空白单元格。 这是我的代码:
var ssTestUsage = SpreadsheetApp.getActiveSpreadsheet();
var sTestUsage = ssTestUsage.getActiveSheet();
var lastRowTestUsage = sTestUsage.getLastRow();
var rangeTestUsage = sTestUsage.getSheetValues(1, 1, lastRowTestUsage, 4);
var TESTPARTS_ID = "1NjaFo0Y_MR2uvwit1WuNeRfc7JCOyukaKZhuraWNmKo";
var ssTestParts = SpreadsheetApp.openById(TESTPARTS_ID);
var sTestParts = ssTestParts.getSheets()[0];
var lastRowTestParts = sTestParts.getLastRow();
var rangeTestParts = sTestParts.getSheetValues(1, 1, lastRowTestParts, 3);
function onOpen() {
for (i = 2; i < lastRowTestUsage; i++) {
if (rangeTestUsage[i][0] !== "" && rangeTestUsage[i][1] == "") {
for (j = 1; j < lastRowTestParts; j++) {
if (rangeTestUsage[i][0] == rangeTestParts[j][0]) {
Logger.log(rangeTestUsage[i][1]);
Logger.log(rangeTestParts[j][1]);
rangeTestUsage[i][1] = rangeTestParts[j][1];
break;
}
}
}
}
}
这个问题是什么都不做:
rangeTestUsage[i][1] = rangeTestParts[j][1];
我知道必须有一种方法可以从一个范围到另一个范围获取数据。 如果我完全不正确,或者我走的路正确,请告诉我。
该声明
“这没有做任何事情:”
rangeTestUsage[i][1] = rangeTestParts[j][2];
不是真的,也不是真的...,实际上它确实将值分配给rangeTestUsage i,但是您没有看到它,因为它没有反映在电子表格中。
这两个值都是使用getValues
从Sheet中获取的,因此当时它们都是数组元素。
缺少的只是使用对称语句setValues()
将数组写回到工作表
尝试一下,如果出现问题,请立即返回。
编辑:
起初我没有注意到您使用的是getSheetValues
而不是getValues
(这是因为我从未使用过它)……唯一的区别是getValues是range类的一种方法,而您的属于sheet类 ; 语法在某种程度上相似,只是使用
Sheet.getRange(row,col,width,height).getValues()
它需要多花一个字,但具有直接等于设定值的优点
Sheet.getRange(row,col,width,height).setValues()
Serge insas很好地解释了为什么您的代码不起作用,并提示了以下解决方案。
我建议您使用一个数组来存储所需的列B的更新值,然后在末尾设置整个列。
var ssTestUsage = SpreadsheetApp.getActiveSpreadsheet();
var sTestUsage = ssTestUsage.getActiveSheet();
var lastRowTestUsage = sTestUsage.getLastRow();
var rangeTestUsage = sTestUsage.getSheetValues(1, 1, lastRowTestUsage, 2);
var TESTPARTS_ID = "1NjaFo0Y_MR2uvwit1WuNeRfc7JCOyukaKZhuraWNmKo";
var ssTestParts = SpreadsheetApp.openById(TESTPARTS_ID);
var sTestParts = ssTestParts.getSheets()[0];
var lastRowTestParts = sTestParts.getLastRow();
var rangeTestParts = sTestParts.getSheetValues(1, 1, lastRowTestParts, 2);
var colB = [];
function onOpen() {
for (i = 2; i < lastRowTestUsage; i++) {
if (rangeTestUsage[i][0] !== "" && rangeTestUsage[i][1] == "") {
var matched = false;
for (j = 1; j < lastRowTestParts; j++) {
if (rangeTestUsage[i][0] == rangeTestParts[j][0]) {
//Logger.log(rangeTestUsage[i][1]);
//Logger.log(rangeTestParts[j][1]);
colB.push([rangeTestParts[j][1]]); // push the value we want into colB array
matched = true;
break;
}
}
if(!matched) // this is in case you don't have a match
colB.push([""]); // incase we don't have a matching part
} else {
colB.push([rangeTestUsage[i][0]]); // we already have a value we want so just add that to colB array
}
}
sTestUsage.getRange(2,2,lastRowTestUsage).setValues(colB); // update entire column b with values in colB array
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.