javascript - 如何使用单元格引用重命名新的谷歌工作表?
问题描述
所以目前,我正在尝试制作一个谷歌脚本,为每个唯一的用户名导出单独的谷歌表格——即,尝试为每个客户制作一个可定制的报告。基本上,我有一个唯一用户名列表——一个名为 uniqueUserName 的列表——我想将新工作表的名称设置为与用户名对应的“名称”。例如,假设 Sally1 在下表中。代码将搜索用户名(使用 for 循环),一旦 for 循环命中 Sally1,代码将返回 Sally Wall——即与她的用户名对应的名称。然后 Sally Wall 将成为文档的新名称。
用户名 | 姓名 |
---|---|
蒂米 | 蒂姆·琼斯 |
莎莉1 | 莎莉墙 |
猫为生命 | 约翰·穆勒 |
准备好学习 | 辛迪·罗德尼 |
我尝试了以下代码:
newSheet.setName(function(uniqueName, values){
for (var i=0; i < values.length; i++) {
if (values[i][0].Username === uniqueName) {
return values[i][1].Name;
break;
}
}
});
(我包含了 break 函数,因为如果某人的名字出现两次,我不想复制他们的名字两次。)
我将如何调整此代码以达到这些目的?这是在正确的轨道上吗?
老实说,我在这段代码上已经有一段时间了,尽可能多地查找堆栈溢出,YouTube,非常感谢您的帮助!
解决方案
一个问题是您将一个函数传递给setName()方法,但它需要一个字符串。解决此问题的一种直接方法是在声明函数后立即调用该函数,同时传递参数。
另一件事是您正在尝试访问 中的属性Name
和Username
元素values
,但是,假设您values
从getValues()收到这些属性,则这些属性不存在。您可以通过仅使用索引来获得所需的值,就像您已经在做的那样:values[i][0]
和values[i][1]
.
此外,您不需要使用break
,因为无论如何循环都会被return
语句中断。
考虑到上述情况并假设有一个名为Names的工作表(其中包含您发布的名称)和另一个名为Report Template的工作表,您可以将代码更改为:
function newNamedSheetTest() {
const uniqueName = 'Sally1';
const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
const values = spreadsheet.getSheetByName('Names').getDataRange().getValues();
const newSheet = spreadsheet.getSheetByName('Report Template').copyTo(spreadsheet);
newSheet.setName(function (uniqueName, values) {
for (let i = 0; i < values.length; i++) {
if (values[i][0] === uniqueName) {
return values[i][1];
}
}
}(uniqueName, values));
}
function newNamedSheetTestShort() {
const uniqueName = 'Sally1';
const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
const values = spreadsheet.getSheetByName('Names').getDataRange().getValues();
const newSheetName = values.filter(row => row[0] === uniqueName).map(row => row[1]);
const newSheet = spreadsheet.getSheetByName('Report Template').copyTo(spreadsheet);
newSheet.setName(newSheetName);
}
推荐阅读
- wso2 - 如何使用 WSO2 将动态值传递给 Sql
- python - how to aggregate multiple rows in pandas
- c++ - How can I fix the following error "no match for call to '(std::tr1::shared_ptr<_iobuf*>) (FILE*&)'"
- css - How to fix Laravel project that renders properly only on computers other than my own?
- forms - Add custom datasouce to form in ax 2012
- google-sheets - Countif value is unique and occurs in given month
- angularjs - Can a chart-line show a legend like chart-radar (for instance)?
- ibm-cloud - 部署功能失败
- elasticsearch - 在弹性搜索版本 6.2.3 中获取多个字段的唯一记录
- c# - 如何从 c# mvc 控制器调用具有多个 json 参数的 API