当前位置: 首页 > 知识库问答 >
问题:

是否可以在谷歌应用程序脚本中进行导入?

元修然
2023-03-14

今天我一直在玩谷歌应用程序脚本,我正在尝试编写一些自定义电子表格函数。我做了一些搜索,但找不到我的问题的答案。

我知道,在谷歌电子表格中,您可以在电子表格的单元格中使用ImportRange,如下所示:

=ImportRange(spreadsheet_key;sheet!range_of_cells)

我的问题是,有没有可能在谷歌应用程序脚本中做类似的事情?如果有,怎么做?

我想从另一个电子表格上的工作表(而不是脚本将驻留的电子表格上的工作表)导入一系列单元格。

共有3个答案

司英飙
2023-03-14

我最近需要这样做。这就是我想到的,只需将电子表格键和范围硬编码到ahab的myImportRange函数中

// to be used in the spreadsheet like so:  = myScriptedImportRange( GoogleClock() )
// no need to include key or range because they are in the script here
// 
// the third parameter - GoogleClock() - triggers an automatic update every minute.
// updated 2011-07-17 (ahab): better regex to strip sheetname of *outer* single quotes
// updated 2013-01-27 (ben) to hard-code key and range 
function myScriptedImportRange(  ) { 
 var key = "PUT YOUR DATA_SPREADSHEET_ID IN HERE"
 var sheetrange = "PUT YOUR SHEET AND CELL RANGE IN HERE"
 var shra = sheetrange.split("!") ;
 if (shra.length==1) shra[1]=shra[0], shra[0]="";  

 var sheetstring = shra[0].replace( /^'(.*)'$/g , "$1") // was: replace( /'/g , "") ; updated 2011-07-17 (ahab)
 var rangestring = shra[1] 

 var source = SpreadsheetApp.openById( key )    
 if ( sheetstring.length==0 ) sheet = source.getSheets()[0] ;
 else sheet = source.getSheetByName( sheetstring ) ;

 return  sheet.getRange( rangestring ).getValues(); 
}

在我的例子中,我有一组私有表,一个中间表,它使用常规的myImportRange和VMERGE以及一些SQL将私有表中的选择组合到中间表中,然后是一个公共表,它只有一个单元格,其中包含=myScriptedImportRange(GoogleClock())

请注意,这里有一个类似的方法:https://stackoverflow.com/a/11857014

还请注意,重要性范围函数和相关函数通常存在一个问题,即当原始工作簿打开/不打开时,无法显示导入的数据。这里的评论描述了一个简单的方法:https://stackoverflow.com/a/11786797

涂选
2023-03-14

谷歌似乎以其无限的智慧改变了openById和类似功能的行为。在自定义函数的上下文中不再允许它们。

看见https://code.google.com/p/google-apps-script-issues/issues/detail?id=5174更多细节。

他们建议使用IMPORTRANGE作为一种解决方案,但如前所述,这需要在单元格中调用。

我们的解决方案是在工作表中使用IMPORTRANGE,并将获取的数据传递到自定义函数中,因为数据集很小。我希望这些信息有帮助!

文英达
2023-03-14

是的,这是完全可能的。您只需要调用SpreadsheetApp.openById,然后正常获取所需的工作表和范围。

请查看文档:范围。getValues()范围。setValues()是非常基本的GAS方法,描述得非常好。

同时阅读教程。

 类似资料:
  • 对于我正在开发的谷歌应用程序脚本,我需要过滤掉那些迟交的学生提交来降低他们的成绩。 根据Google的文档,我假设这是通过使用classroom.courses.coursework.studentsubmissions.list得到的,但我不知道如何将late参数应用到列表中,以便只得到迟交作业的人。

  • 在继续使用GoogleApps脚本构建Google电子表格的过程中,我已经完成了获取Bittrex和Poloniex余额的工作,但无法使用Cryptopia。 下面是我与Bittrex将JSON对象数组映射到字符串的斗争的链接 以下是官方API链接:https://www.cryptopia.co.nz/Forum/Thread/256 以下是一些例子: https://www.cryptopia

  • 使用谷歌应用脚本Gmail库,当我使用函数,API似乎将过去的一个段落拆分为多个段落,可能会使用字符限制。例如,我的电子邮件中有一段写道: 但当我在电子邮件中调用此功能时,它变成: 而且,当我在一个新的行定界符上拆分电子邮件文本,并进行一些清理,以使用我的输出创建一个数组时,我最终得到: 我查看了这篇Reddit帖子,它似乎处理了类似的问题。但是,我尝试了提出问题的人提出的解决方案: 但它并没有满

  • 并将我的fabebook应用程序画布url设置为 但facebook应用页面没有回应。在我的google script记录器中,很明显它是通过方法post访问的: 我也尝试过ContentService和UiApp,但还是失败了。

  • 我已经为GoogleSheets编写了一个GoogleApps脚本,但它需要运行不同的代码,这取决于它是在“新”工作表上运行,还是在“旧工作表”格式的工作表上运行。 它是在“旧工作表”上编写的,但我希望在Google将所有工作表更新为“新工作表”格式时保持兼容性。(这特别适用于向用户显示警报框:https://developers.google.com/apps-script/guides/dia

  • 我一直在努力对我的数据进行自动排序(根据第二行第一列数据进行升序),我通过在线搜索找到了一些提示,但遇到了一个错误,似乎我无法通过网络找到答案。 下面是一个场景: 我有两张床单,一张 这是床单 这是第二张 请注意,两张表中的列lastname和code相同,不同之处在于列的性别(在下拉列表中格式化) 我发现一个脚本似乎可以工作,但我不能完全正常工作,下面是我运行脚本后的输出。 注意红色框中的列,似