javascript - 如何使用谷歌脚本从谷歌表格中提取特定列?
问题描述
所以我有一个由谷歌表格提供的膳食清单电子表格。员工每天晚上在一天结束时计算膳食,每列的每个第二个单元格都有一个标题:初始,星期一,星期二你明白了。我想在某些商品快速售出时通知自己,以便补货。我的问题是我可以很容易地从最近一个晚上使用
.getLastColumn();
但我想基于列的第二个单元格中具有“初始”的最新列中的每个 lastColumn 数据,并将它们放在单独的工作表上的 2 列数组中。有任何想法吗?到目前为止,这是我的脚本;
function activeData() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var Sheet = ss.getSheetByName("IREmaildata");
var lastCol = Sheet.getLastColumn();
var rangeInitial = Sheet.getDataRange(); // Not sure if this would be correct?
var initial = rangeInitial.getValues();
var int = "Initial"; //the 3rd cell in "Initial" column must say "Initial".
var rangeLastnight = Sheet.getRange(1,lastCol,37,1); //I can easily get the data from the most recent googleForm submission.
var lastNight = rangeLastnight.getValues(); //I can easily get the data from the most recent googleForm submission.
/*
probably some type of logic will go here?
*/
ss.getSheetByName("Sheet5").getRange(1,2,37,1).setValues(yesterday);
ss.getSheetByName("Sheet5").getRange(1,3,37,1).setValues(today);
}
我的电子表格;https://docs.google.com/spreadsheets/d/1X_UcqyXXRMyjZ2j46TymMrIMWvt19HOZTTaEUlIVqwE/edit?usp=sharing
解决方案
- 在您共享的电子表格中,表格
IREmaildata
和Sheet5
分别是您期望的输入和输出。 - 从您共享的电子表格中,您想要从 sheet 中检索值
IREmaildata
。- 您要检索最后一列 (
Most recent Night Dynamic Column
),并检索位于第二行且距最后一列最近的列 (Begining of the week Dynamic Column
) 。Initial
和“A”列。 - 并且您想将计算的值放入新列 (
Precenatage sold Static Column
)。 - 对于您的共享电子表格,您希望将“A”、“V”、“Y”列和计算值检索到电子表格中的其他工作表。
- 您要检索最后一列 (
- 您想使用 Google Apps 脚本实现此目的。
如果我的理解是正确的,这个答案怎么样?请认为这只是几个可能的答案之一。
流动:
该示例脚本的流程如下。
- 从工作表的数据范围中检索值
IREmaildata
。 - 从值中检索最后一列的索引。
- 检索第 2 行值为 的列的索引
Initial
。 - 检索列“A”,即
Initial
第 2 行值为 的列的索引,即最后一列的索引。 - 计算百分比并将值放入数组以放入电子表格。
- 将结果值放入电子表格。
示例脚本:
请将以下脚本复制并粘贴到共享电子表格的容器绑定脚本中。并请准备目标表并将目标表名称设置为destSheetName
,然后运行该功能activeData
。
function activeData() {
var destSheetName = "###"; // Please set the destination sheet name.
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("IREmaildata");
var values = sheet.getDataRange().getValues();
var lastColumnIndex = values[1].length - 1;
var initialIndex = 0;
for (var i = lastColumnIndex - 1; i >= 0; i--) {
if (values[1][i] == "Initial") {
initialIndex = i;
break;
}
}
var result = values.map(function(row, i) {
var ar = [row[0], row[initialIndex], row[lastColumnIndex]];
if (i == 0) {
ar.push("");
} else if (i == 1) {
ar.push("Since Begining of week");
} else if (i > 1) {
var temp = 1 - (row[lastColumnIndex] / row[initialIndex]);
ar.push(isNaN(temp) ? "None sold" : temp);
}
return ar;
});
var destSheet = ss.getSheetByName(destSheetName);
destSheet.getRange("D3:D").setNumberFormat("0.00%");
destSheet.getRange(1, 1, result.length, result[0].length).setValues(result);
}
笔记:
- 在上面的脚本中,
getValues()
用于从工作表中检索值IREmaildata
。在这种情况下,日期值作为日期对象检索。例如,如果要修复日期格式,请修改var values = sheet.getDataRange().getValues();
为var values = sheet.getDataRange().getDisplayValues();
.
参考:
推荐阅读
- python - 初学者如何在 Argv 中分隔值?
- java - 如何在 JUnit 的 @Rule 中使用 @Values 字段?
- go - 输出反向链表时出现无限循环
- scala - 如何处理 Flink 的 Table API 窗口中的后期元素?
- wso2-am - WSO2 API-M 不能使用在租户中创建的 API
- android - 没有任何代码更改的 Android Studio 的 Gradle 构建失败
- javascript - 如何获取 javascript 承诺的返回值?
- neo4j - 当唯一性基于节点属性和关系的存在时在 Neo4j 中合并
- google-cloud-platform - GCP SPANNER:如何使用单个选择语句从多个表中计算记录
- node.js - 遇到奇怪的语法错误 Unexpected token * error