我必须使用谷歌电子表格。我正在使用一些模板电子表格,它们都包含很多指向其他电子表格的链接。问题是,每当我复制模板电子表格以使用大部分链接(使用 importrange 函数创建)时,我都需要再次授予它们访问权限

我想要做的是制作一个脚本,让我可以一次性导入所有链接。我试图制作一个应用程序脚本,但我找不到任何方法来访问带有“允许访问”按钮的文本框,以便我可以制作我的脚本。我的问题是:有没有办法以编程方式访问“允许访问”按钮?或者有没有其他方法可以解决我的问题并允许一键访问所有链接?
当您在电子表格中手动输入importrange函数时,您会收到一个弹出窗口,并且必须“允许访问”。
但是,我试图找到一种通过脚本执行此操作的方法,因为我正在创建许多电子表格,每个电子表格都带有query-importrange函数(我“拥有”要导入数据的电子表格)。对于我来说,有太多东西无法通过弹出窗口手动“允许访问”并更新该功能以包括查询功能。
因此,我正在应用程序脚本中寻找一个函数调用,该函数调用可以执行与弹出窗口相同的操作。下面的代码段示例。
有人知道可以“允许访问”的功能吗?斯特凡
// create new spreadsheet file
...
var ss = createSpreadsheet(fileName);
var spreadsheet = SpreadsheetApp.open(ss);
var sheet = spreadsheet.getSheetByName("Sheet1");
// Add student as Viewer
spreadsheet.addViewer(studentEmail);
// Add ImportRange function
var sheet = spreadsheet.getSheets()[0];
var cell = sheet.getRange("A1");
var filter = "select * where Col3='" + studentEmail + "'";
var qry = '=QUERY(importRange("' + fileKey + '","14-15S2!A1:AE");"' + filter + '";1)';
cell.setValue(qry);
// I need a function to 'allow access' here, so the function can be allowed access. …Run Code Online (Sandbox Code Playgroud) 添加链接的电子表格后,我的 IMPORTRANGE 函数不会使用新数据刷新。相反,每当我想查看新信息时,我都必须再次剪切和粘贴所有公式。
我正在使用新版本的 Google 表格,我知道在使用 IMPORTRANGE 功能发布此表格时存在一些问题。
我目前有 24 列要导入的数据,原始电子表格会随着链接到表单而不断增长。这是我使用 IMPORTRANGE 的主要原因,因为它有助于保持原始电子表格以最大速度工作。
我想知道的是,有没有其他人遇到过这样的问题,如果有,是否有任何解决方法(在应用程序脚本/另一个功能中)?在最坏的情况下,是否有一个应用程序脚本可以清除电子表格并在打开/单击菜单时重新输入所有公式,因为每次创建新条目时更新每一列真的很痛苦。
编辑 -如果更改任何内容,我尝试导入的几乎所有单元格都是在原始电子表格中制定的- 编辑
我有一个电子表格目标,它使用ImportRange从另一个电子表格源获取一些数据,如
A6 = query(ImportRange("mykey", "Weekly!B:BI"), CONCATENATE("select * WHERE Col1='",B3,"'"), 0)
Run Code Online (Sandbox Code Playgroud)
select子句用于子选择与B3中的值匹配的数据 - 如果更改此单元格值,则"立即"更新导入.
如果有人在源电子表格中更改某些内容,我希望能够强制更新,以便我们在"立即"中看到它反映在目标中.目前这只发生在"一些未指定的时间之后",这一时间长达一分钟左右,而且对于我的目的来说太慢了.
更新:
根据下面的答案和评论,我在Source中添加了一个函数UpdateTarget,该函数从on edit trigger*调用:
function UpdateTarget() {
try {
var ss = SpreadsheetApp.openById("targetID");
}
catch(err)
{
Browser.msgBox(err);
}
var sheet = ss.getSheetByName("Weekly");
sheet.getRange("A4").setValue("=query(ImportRange("sourceID", "Weekly!B:BI"), CONCATENATE("select * WHERE Col1='",B3,"'"), 0) ");
SpreadsheetApp.flush();
}
Run Code Online (Sandbox Code Playgroud)
这似乎更有效,但我可能有一个脚本,如果我沿着这条路线走下去,将更新的值直接写入目标.
我真的希望Target成为其他用户可以复制的模板,并且可以从主源中提取特定的"实时"数据,我不愿意在Source中实现需要在添加新目标时进行维护的脚本.
我认为我真正需要的是一种重新陈述公式的方法,这取决于可以编辑的单元格并触发重新计算 - 但是对结果没有影响?
(*旁白:我发现openByID函数返回"Action not allowed"异常,除非通过显式触发器调用 - onEdit禁止编辑其他电子表格 - 请访问https://developers.google.com/apps-script/understanding_triggers).
google-sheets google-apps-script importrange google-sheets-formula
我找到了这个主题的多个主题,没有人回答我的问题.
问题:我想将多个电子表格的数据汇总到一个电子表格中.
不应以不同方式处理重复项.我希望它们看起来像它们出现在不同的纸张中一样频繁.
问题:是否可以在不编写脚本或使用jQuery的情况下执行此操作?例如,使用IMPORTRANGE?
什么行不通:我尝试使用IMPORTRANGE如下:
ARRAY{IMPORTRANGE("key-of-spreadsheet1","list!A2:A500"), IMPORTRANGE("key-of-spreadsheet2", "list!A2:A500")}
Run Code Online (Sandbox Code Playgroud)
这会导致错误.
谢谢您的帮助.
google-sheets array-formulas importrange google-sheets-formula
我想从另一个 Google 工作表导入一个范围,但要忽略空单元格,以便数据背靠背打印(相对于导入空单元格会产生很大的间隙)。这是我的公式(为了保密而更改了 Google 链接):
=IMPORTRANGE("https://docs.google.com/spreadsheets/d/dalsfjasfdjjasfd/edit#gid=76574001",
"Course_Schedule!F2:F77")
Run Code Online (Sandbox Code Playgroud)
换句话说,大约结果的导入范围是: 空白单元格、空白单元格、25、43、空白单元格
当我希望它是: 25, 43
google-sheets google-query-language google-sheets-query importrange google-sheets-formula
我目前正在使用以下电子表格
在其中,我使用 IMPORTRANGE 从另一个工作表导入数据,并编写一个 QUERY 来将 B 列中的单元格(对应于特定零件编号)与导入工作表的 D 列中找到的相应切割数量相匹配。我写的查询如下。
=QUERY(IMPORTRANGE("https://docs.google.com/spreadsheets/d/1kFK-ZW8QjtsLYY5twdoMNTdqobGNWIV8nAFBRdouE28/edit#gid=473793446",
"FABRICATION LOG!A78169:K"), "Select Col3 where Col4 = "&B3&" limit 1", 0)`
Run Code Online (Sandbox Code Playgroud)
并返回错误消息:
无法解析函数 QUERY 参数 2 的查询字符串:NO_COLUMN:WFR332703
我已将 ImportRange 用于上面链接的电子表格的sheet1 中链接到的工作表,并允许访问,因此不存在错误。
Sheet1 用于显示 IMPORTRANGE 返回的值,以便我可以手动查找我期望获得的值。现在,对于其中一些单元格,我预计不会获得值,因为这些单元格不会出现在我要导入的工作表中。但对于其他人,我期待一个数值,但不会返回。我怀疑这可能与数据类型之间不匹配有关,因为 b 列中的条目都是字母和数字,但这只是一种预感,没有实际事实支持。如果有人有任何建议,我们将不胜感激。
google-sheets google-query-language google-sheets-query importrange google-sheets-formula
我\xc2\xb4d 花了 10 多个小时阅读并尝试不同的选项,但没有成功。
\n我有这个字符串(这实际上是其他公式生成的字符串)
\nQUERY({IMPORTRANGE(A1;$D$1);IMPORTRANGE(A2;$D$1);IMPORTRANGE(A3;$D$1);IMPORTRANGE(A4;$D$1)};"select Col13, sum(Col1), sum(Col2), sum(Col3), sum(Col4), sum(Col5), sum(Col6), sum(Col7), sum(Col8), sum(Col9), sum(Col10), sum(Col11), sum(Col12) group by Col13";0)\nRun Code Online (Sandbox Code Playgroud)\n我希望它被理解为一个公式。\n例如我尝试这个函数:
\nfunction doConvert(formula) {\n // Strip leading "=" if there\n if (formula.charAt(0) === '=') formula = formula.substring(1);\n return eval(formula);\n}\nRun Code Online (Sandbox Code Playgroud)\n但我得到:
\n\n\n错误/语法错误:Falta ":" detr\xc3\xa1s del ID de propiedad。
\n(在英语中,属性 ID 后面缺少“:”。
\n
任何其他解决方案都会很棒。
\ngoogle-sheets google-apps-script google-sheets-query importrange google-sheets-formula
我有一个谷歌应用程序脚本,将谷歌表单中提交的信息与使用importrange函数带入谷歌电子表格的信息进行比较.如果我手动运行该脚本,但如果它从表单提交触发器运行,它会报告它没有使用importrange从单元格中获取正确的信息.有没有办法绕过这个,就像我可以添加一个快速功能强制导入范围更新?我已经尝试添加最多10分钟的等待时间,但它没有改变结果.
谢谢
我在Google电子表格上尝试此功能但没有成功,以便在vlookup后收集表格中的值:
=importrange("otherurl";cell("address";vlookup(value("201608"),"All_nodevice!$A$16:$C$1000",2,false)))
Run Code Online (Sandbox Code Playgroud)
我得到一般错误.importrange是否支持这种功能?
- 编辑 - 为了提供更多细节,我需要做的是从左侧值为201608的另一张纸的ceil中提取数据.由于importange想要一个12美元的ceil指针,我想做了以下的步骤:
希望以这种方式更加清晰.
google-sheets gs-vlookup google-sheets-query importrange google-sheets-formula
我在 Google 表格中有一个 IMPORTRANGE 公式,并希望将其应用到下面的其余单元格中。当我向下拖动公式时,它保持不变:
=importrange("1jhXCPi6RUf8MD7XoYgQsH-E0x768UtVxE3XY_kBrbkE","OCT!F2")
Run Code Online (Sandbox Code Playgroud)
如何拖动公式并使其自动增加值(OCT!F2应更改为OCT!F3up to OCT!F118)?
当我把这个公式拖下来的时候,我希望它是这样的。
=importrange("1jhXCPi6RUf8MD7XoYgQsH-E0x768UtVxE3XY_kBrbkE","OCT!F3")
Run Code Online (Sandbox Code Playgroud) 我正在根据其他 19 个 Google 表格的数据制作一份报告。我正在使用QUERY,但我对此有点陌生,不确定我做得是否正确。
我正在尝试使用下面的内容,但似乎以某种方式给出了上述错误。我找不到解决方法。
=QUERY({
IMPORTRANGE("1TRKveEBEitHDkos3WX0pPI6WUVL1gHMzdIkeB6s-dJc", "Data!A1:DL");
IMPORTRANGE("1FONS-hdcUXnLj4UMAsixLL1CVNfL_WdxMbs68ylsyaU", "Data!A1:DL");
IMPORTRANGE("1pE4O-rO5Fg-AmjMGQlb_m2KbeMV1ZT4ylaE5qfT_aaQ", "Data!A1:DL");
IMPORTRANGE("1fMyrxa3rxec_8CMOsl2qbLFqht8Z2_SjvShT-WJ-ld8", "Data!A1:DL");
IMPORTRANGE("1SC8E_0Qg9zurGwl0NsisQZO1gJyimMLXvCxRaPrqjic", "Data!A1:DL");
IMPORTRANGE("1rtRAf7T2lY_f_R95-L9B4Mn4sn2a9oVHLour-iJfNMM", "Data!A1:DL");
IMPORTRANGE("1UhBnBRiqPWf444Eyk26hwTEg27ErNvCE2bviRdikLCI", "Data!A1:DL");
IMPORTRANGE("1AVr4ZMOcTBCkUkI6AaO73B0N8AeiEWyHwhyt56iJYPo", "Data!A1:DL");
IMPORTRANGE("1n4p51IPq7m4wgjJiMTHZCKDnoR5udxIwUGY1mgJ6kNo", "Data!A1:DL");
IMPORTRANGE("1tomsqwtJE60j-AAmt5yWFmvHunQQYjVuQmPz0tAmx-s", "Data!A1:DL");
IMPORTRANGE("1gsyd7m867UkX20Ueha4EqSc6Uc4pSzwc-fe-gYxey5c", "Data!A1:DL");
IMPORTRANGE("1KjUVM8nkO0pfJrSed-laSzDAu8S-amPkg6cqSRYWQ2I", "Data!A1:DL");
IMPORTRANGE("1m2MV6VY7sb3zBTuoEQZWJHTxo7moDKtYV-PYJTnES38", "Data!A1:DL");
IMPORTRANGE("1p9dAD60KjpsOp69OBQazeg9ktzTWvtbjXLfzmMUHNLk", "Data!A1:DL");
IMPORTRANGE("15V2rMfnbk5UEPeUa6MtaD8ljm-xbmXBM2WzZrUhDzVU", "Data!A1:DL");
IMPORTRANGE("1DevNq8TbkDhVBkeHPegaHpxaNgvlGtPZExzueN8cpyk", "Data!A1:DL");
IMPORTRANGE("1sXQABwo5NXiz166cruJM5Is4JWKVXzoYS3hh6IcXVj4", "Data!A1:DL");
IMPORTRANGE("1sOBkqGVKl6xn89uRvN-TLlU1TFMJUxD_s8TgmowkLK8", "Data!A1:DL");
IMPORTRANGE("1t8CdrQiJq1h15OIlF5yaRy1AxHyZ_mnEzfSUDEyPSM8", "Data!A1:DL")},
"SELECT Col85,Col86,Col87,Col88,Col89,Col90,Col91,Col92,Col93,Col94,Col95,Col96,Col97,Col98,Col99,Col100,Col101,Col102,Col103,Col104,Col105,Col106,Col107,Col108,Col109,Col110,Col111,Col112,Col113,Col114,Col115
WHERE Col85 IS NOT NULL")
Run Code Online (Sandbox Code Playgroud) google-sheets array-formulas google-sheets-query importrange google-sheets-formula