我正在制作一个Google 表单,我想向其中添加一些问题,但这些问题应该从Google Sheet中的问题池中随机挑选。为此需要做什么?例如:我想从 Google 表格的 20 个问题池中随机显示 5 个问题
Ps:我确实尝试了 Stackoverflow 上已经提到的解决方案,但它对我的目的没有帮助。
请参阅下面的示例,
function doSomething1(){/*needs ss*/const ss = SpreadsheetApp.openById(/*SPREADSHEET_ID*/);}
function doSomething2(){/*needs ss*/const ss = SpreadsheetApp.openById(/*SPREADSHEET_ID*/);}
function doItAll(){
doSomething1();
doSomething2();
}
Run Code Online (Sandbox Code Playgroud)
可以使用全局变量来简化,而不是在两个函数中调用 Spreadsheet
const ss = SpreadsheetApp.openById(/*SPREADSHEET_ID*/);
function doSomething1(){/*do something with ss*/}
function doSomething2(){/*do something with ss*/}
function doItAll(){
doSomething1();
doSomething2();
}
Run Code Online (Sandbox Code Playgroud)
这里的问题可以在不使用全局变量的情况下通过简单地ss在函数之间传递变量来解决。但是,由于多个函数需要访问该变量,这会变得更加复杂ss。而且通过ss很麻烦。没有太多方法可以避免应用程序脚本中的全局。不支持模块。如果您使用 IIFE,则所有函数都对 IDE 隐藏,从而无法从 IDE 或其他任何地方调用函数。在这里使用全局要优雅得多。但如果我有一个简单的触发器,就会出现问题:
const ss = SpreadsheetApp.openById(/*SPREADSHEET_ID*/);
function doSomething1(){/*do something with ss*/}
function doSomething2(){/*do something with ss*/}
function doItAll(){
doSomething1();
doSomething2();
}
function onOpen(){/*Adds a menu*/}
Run Code Online (Sandbox Code Playgroud)
添加菜单将失败,因为此行之前onOpen已加载,并且此行需要权限/授权,而作为简单触发器,不会使用任何需要授权的代码运行。SpreadsheetApp.openById(/*SPREADSHEET_ID*/)onOpenonOpen …
lazy-loading global-variables google-sheets google-apps-script
我是 Google 应用脚本新手,有一个包含三列的电子表格:名称、过期和上次联系:https ://docs.google.com/spreadsheets/d/1W04JiFZwpGCD-qddUkNJ9xQ1xiYwZnGhissudF1EvxM/edit?usp=sharing
我想向自己发送一封电子邮件提醒,其中包含 B 列中逾期金额的任何人的姓名。
到目前为止,我只能编写一个脚本,为第 2 行向自己发送电子邮件。我不知道如何让脚本循环遍历 B 列中的值。
这是我的脚本:
function sendEmail() {
var overdueRange = SpreadsheetApp.getActiveSpreadsheet().getRange("B2");
var overdueValue = overdueRange.getValue();
if (overdueValue === "Overdue"){
var nameRange = SpreadsheetApp.getActiveSpreadsheet().getRange("A2");
var name = nameRange.getValues();
var message = 'Reach out to ' + name
var subject = 'Reach out to this person.'
MailApp.sendEmail('myemail@email.com', subject, message);
}
}
sendEmail()
Run Code Online (Sandbox Code Playgroud) 考虑以下简单示例,文件country.gs
class Country { }
Run Code Online (Sandbox Code Playgroud)
和文件subcountry.gs
class SubCountry extends Country{ }
function test(){}
Run Code Online (Sandbox Code Playgroud)
尝试运行 test() 我得到
ReferenceError: Country is not defined
Run Code Online (Sandbox Code Playgroud)
如果我加入文件或更改加载顺序,它就可以正常工作。
显然,我不想依赖于文件加载顺序,也不想在推送时进行更改(按字母顺序排序),所以这绝对不是重命名文件以便编译它们的好方法。
对此有合适的解决方案吗?
例子:
我试图将一行中的值放入数组中。为此,我使用了 googlesheet 中的 appscript。检查这个数组的长度后rowtemp,答案是1。但我想找到里面的孩子的数量。如果“temp”中的元素与“rowtemp”中的元素相同,那么您需要找到我使用以下代码的列号。

function rangeExa(){
var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet4");
var temp = ss.getRange("A11:B22").getValues();
Logger.log(temp);
Logger.log(temp.length);
Logger.log(temp[3][0]);
var rowTemp = ss.getRange("D25:O25").getValues();
Logger.log(rowTemp);
Logger.log(rowTemp.length);
Logger.log(rowTemp[0][2]);
Logger.log(rowTemp);
for(i=0; i<=rowTemp.length; i++){
if(temp[3][0] == rowTemp[0][i]){
Logger.log("yessss");
}return;
}
}
Run Code Online (Sandbox Code Playgroud) 如何从 Google 表格创建 Markdown 表格?
markdown google-sheets google-apps-script github-flavored-markdown
大家好,我有一个团队假期日历。用户按字母“v”来设置假期日期,假期日期存储在外部工作表中(用于其他目的,因此我不能简单地在同一电子表格中拥有单独的工作表)。
问题是,假期日期可以是“付费”或“银行”(以便稍后记入)。我使用模态 Html 窗口询问用户假期是两者中的哪一个。但是,我在打开 html 模式窗口之前设置的全局变量失去了它们的值。我需要这些全局变量来存储原始条目的行和列(因为用户在键入“v”后单击单元格会更改 getActiveCell() 的值。
应该发生什么:
我可以让它进行到上面的步骤 3,但是,全局变量正在丢失其值,并且无法确定用户最初单击的单元格。
步骤1
第2步
var selectedDateRangeRow;
var selectedDateRangeColumn;
function onEdit(e) {
if (sheet.getRange("AH2").getValue() == true && sheet.getActiveCell().getValue() == "V") {
selectedDateRangeRow = sheet.getActiveCell().getRow();
selectedDateRangeColumn = sheet.getActiveCell().getColumn();
ShowVacationMenu();
}
}
function ShowVacationMenu() {
var html = HtmlService.createHtmlOutputFromFile('VacationType').setTitle("New Vacation Date");
SpreadsheetApp.getUi().showModalDialog(html, "Select Vacation Type");
}
function AddDateToOverTimeSheet(selectedVacationType) {
Browser.msgBox(selectedDateRangeRow); //This global value returns empty/null.
}
Run Code Online (Sandbox Code Playgroud)
html 文件:
<!--Let browser know website is optimized for mobile-->
<meta name="viewport" …Run Code Online (Sandbox Code Playgroud) 我的电子表格有一列 (A),其中包含 1000 多行值,例如 10.99\xe2\x82\xac、25.99 \xe2\x82\xac 等。出于优化目的,我循环浏览此列并删除“EUR”标记并替换“.”。和 ”,”。虽然代码有效,但我的问题是执行时间非常长,并且对于数千种产品有时会超时。我知道我可能没有遵循最佳实践,但由于我有限的 JavaScript 技能,这是我能想到的最佳解决方案。有什么帮助吗?
\nfunction myFunction() {\n var ss = SpreadsheetApp.getActive();\n var sheet = ss.getSheetByName(\'Table\');\n var lastRow = sheet.getRange(1,1).getDataRegion(SpreadsheetApp.Dimension.ROWS).getLastRow();\n for (var i = 1; i < lastRow +1; i++) {\n var price = sheet.getRange(i,1).getValue();\n var removeCur = price.toString().replace(" EUR","").replace(".",",");\n sheet.getRange(i,1).setValue(removeCur);\n }\n}Run Code Online (Sandbox Code Playgroud)\r\n我想将所有文件和文件夹权限重置为“受限”。在整个驱动器上。
谷歌驱动器上的权限不会级联,因此从父文件夹中删除它们不会在子文件夹和文件中删除它们。我有大量的文件和文件夹。
我发现带有脚本的过时帖子,但“Uiapp”功能已被弃用(评论中有人说它可以删除一些文件,所以不是我真正想要的)
这是类似内容的过时帖子(不再工作): https: //webapps.stackexchange.com/questions/37592/how-do-i-reset-permissions-for-google-drive-documents-in-all-子文件夹
我使用 URLFetchApp 在 Apps 脚本中构建了一个简单的自定义函数来获取 TikTok 帐户的关注者计数。
function tiktok_fans() {
var raw_data = new RegExp(/("followerCount":)([0-9]+)/g);
var handle = '@charlidamelio';
var web_content = UrlFetchApp.fetch('https://www.tiktok.com/'+ handle + '?lang=en').getContentText();
var match_text = raw_data.exec(web_content);
var result = (match_text[2]);
Logger.log(result)
return result
}
Run Code Online (Sandbox Code Playgroud)
日志会返回正确的关注者数量。
但是,当我将代码更改为;
function tiktok_fans(handle) {
var raw_data = new RegExp(/("followerCount":)([0-9]+)/g);
//var handle = '@charlidamelio';
var web_content = UrlFetchApp.fetch('https://www.tiktok.com/'+ handle + '?lang=en').getContentText();
var match_text = raw_data.exec(web_content);
var result = (match_text[2]);
Logger.log(result)
return result
}
Run Code Online (Sandbox Code Playgroud)
并在电子表格中使用它,例如=tiktok_fans(A1),其中 A1@charlidamelio我#ERROR在单元格中得到响应
类型错误:无法读取 …
google-sheets http-headers google-apps-script custom-function tiktok
javascript ×3
for-loop ×1
google-apps ×1
google-forms ×1
http-headers ×1
lazy-loading ×1
markdown ×1
tiktok ×1