google-apps-script - 如何从 Google 表格的下拉列表中获取数据?
问题描述
我正在尝试将下拉列表的所有选项连续转换,但我找不到方法。
假设下拉菜单有简单的选项 1 2 3 4
我需要将所有值提取到一行。可以转置为行,单个单元格,连接,没关系。我只需要提取这些值。
解决方案
我相信你的目标如下。
- 您要检索单元格中下拉列表的值,并将值放在行方向上。
在这个答案中,我想提出一个使用 Google Apps 脚本的自定义函数。
示例脚本:
请将以下脚本复制并粘贴到 Google 电子表格的容器绑定脚本的脚本编辑器中。请放到=SAMPLE("A1")
一个牢房里。这样,脚本将作为自定义函数运行。并且下拉列表的值被放到行中。
function SAMPLE(range) {
const sheet = SpreadsheetApp.getActiveSheet();
const dataValudations = sheet.getRange(range).getDataValidations();
return dataValudations.reduce((ar, r) => {
r.forEach(c => {
if (c) {
const temp = c.getCriteriaValues()[0];
if (c.getCriteriaType() == SpreadsheetApp.DataValidationCriteria.VALUE_IN_LIST) {
ar = ar.concat(temp.map(e => [e]));
} else if (c.getCriteriaType() == SpreadsheetApp.DataValidationCriteria.VALUE_IN_RANGE) {
ar = ar.concat(temp.getValues().flat().map(e => [e]));
} else {
ar.push([""]);
}
} else {
ar.push([""]);
}
});
return ar;
}, []);
}
结果:
当单元格“A1”具有值为 的下拉列表时1,2,3,4
,上述脚本返回以下结果。
如果要将值放在列方向,请使用以下脚本。
function SAMPLE(range) { const sheet = SpreadsheetApp.getActiveSheet(); const dataValudations = sheet.getRange(range).getDataValidations(); return dataValudations.reduce((ar, r) => { r.forEach(c => { if (c) { const temp = c.getCriteriaValues()[0]; if (c.getCriteriaType() == SpreadsheetApp.DataValidationCriteria.VALUE_IN_LIST) { // ar = ar.concat(temp.map(e => [e])); ar.push(temp); } else if (c.getCriteriaType() == SpreadsheetApp.DataValidationCriteria.VALUE_IN_RANGE) { // ar = ar.concat(temp.getValues().flat().map(e => [e])); ar.push(temp.getValues().flat()); } else { ar.push([""]); } } else { ar.push([""]); } }); return ar; }, []); }
参考:
推荐阅读
- codeigniter - https url codeigniter中的htaccess问题
- jestjs - 由其引用调用的类方法上的 jest.spyOn 不起作用
- java - Jbehave 中的并发故事记者
- javascript - JS如何在forEach循环中从数组中删除对象?
- java - 为属性值转义 XML 字符 Java
- mysql - 使用 JSON_OBJECT 选择查询
- python - 无法在 Windows 上安装 python-libmemcached
- c# - 我有几个属性如何在方法中制作它们
- label - Gnuplot,热图,标记某个点
- angular - 从 catchError 中的返回 observable 中获取值