【问题标题】:Is there a way to import data from one Google sheet into another by the name of the sheet file?有没有办法通过工作表文件的名称将数据从一个 Google 工作表导入到另一个工作表中?
【发布时间】:2020-04-27 13:17:44
【问题描述】:

我正在寻找一种动态方式来链接另一个谷歌表格中的数据。 在一个理想的世界里,我会有一种搜索查询,它会查看我所有现有的谷歌工作表名称并打开具有匹配名称的那个,这样我就可以从中访问数据。

这应该链接在一个类似于IMPORTRANGE 函数的单元格中,但在这种情况下不是链接到另一个工作表,而是我想通过名称链接它。

我想节省手动查找所有工作表链接并将它们复制粘贴到公式中所带来的工作量和维护量。我想自动执行每次创建新文档时查找链接的过程,并且需要使用它创建导入范围函数。相反,我希望它自动找到依赖的工作表。

举个例子,我有一个 MASTER_SHEET.googlesheetsdoc,其中包含来自 January.googlsheetsdoc、February.googleshetsdoc 的所有数据... 由于不同月份的所有数据都收集在不同的文档中,因此我必须手动获取每个文档的链接才能访问其中的数据。 如果有一个像 IMPORTRANGE 这样的公式,我可以在我的 MASTER_SHEET 中像这样工作。

IMPORTRANGE(SEARCHQUERY(January), A:1:C:10) IMPORTRANGE(SEARCHQUERY(February), A:1:C10)

而且它总能找到必要的数据。没有人复制并粘贴到文档的链接。所以更现代和动态的方法。

我暂时没有使用 AppScript。

【问题讨论】:

  • 你好@BenjaminK,我看到下面提供的方法对你没有帮助。 “查找相关工作表”是什么意思?您介意提供有关您想要实现的目标的更多详细信息吗?此外,您是否尝试过使用 Apps Script?干杯!
  • @ale13 我为您更新了问题。现在谢谢!

标签: google-sheets


【解决方案1】:
  1. 创建工作表名称和 URL 表

  2. 现在很简单 将 importrange 函数与表的 vlookup 一起使用。

You can accomplish all of this with the DriveApp object.

【讨论】:

  • 我想对于某些人来说这将是一种可行的方法。但由于这与将链接插入导入范围函数的工作量和维护量相同,因此它对我不起作用。我想自动执行每次创建新文档时查找链接的过程,并且需要使用它创建导入范围函数。相反,我希望它自动找到依赖的工作表。
  • @BenjaminK 每次进行编辑或打开工作表时,只需使用DriveApp 对象重新创建表格?当然,您意识到总会有重复的姓名表,因此您需要决定如何处理。
  • 对不起,我不确定我是否理解你? “每次编辑或打开工作表时对象”是什么意思?明智地命名我肯定需要使用唯一的名称。
  • @BenjaminK 您可以在 OnEdit 功能中执行第 1 步,这将完成您想要的。
【解决方案2】:

没有直接的方法可以按照您希望的方式完成这项任务。

但是,您可以使用 Apps 脚本。 Apps Script 是一个强大的开发平台,可用于构建 Web 应用程序和自动化任务。它的特别之处在于它易于使用并易于创建与 G Suite 集成的应用程序。

因此,您可以使用一个简单的脚本,要求用户输入文件名,然后构建公式。

片段

function onOpen(e) {
    SpreadsheetApp.getUi()
        .createMenu('Import Range Menu')
        .addItem('Import Range', 'importData')
        .addToUi();
}

function importData() {
    var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
    var ui = SpreadsheetApp.getUi();
    var response = ui.prompt('Please input the name of the spreadsheet', ui.ButtonSet.OK);
    var name = response.getResponseText();
    var files = DriveApp.getFilesByName(name);
    if (files.hasNext() == false) 
        ui.alert("Please input a valid spreadsheet name!");
    else {
        var file = files.next();
        var url = file.getUrl();
        var formula = '=IMPORTRANGE(' + '"' + url + '"' + ',"A1:C10")';
        ss.getRange("RANGE_YOU_WANT_THE_FORMULA_IN").setFormula(formula);
    }
}

说明

onOpen(e) 函数是一个触发器,这意味着每次打开主工作表时,您的电子表格上都会出现一个名为 Import Range Menu 的自定义菜单以及 Import Range 子菜单。

通过单击Import Range 子菜单,将执行importData() 函数。 importData() 函数将通过以下消息提示用户。

您将能够输入所需文件的名称,然后使用getResponseText() 检索输入。如果没有找到具有所需名称的文件,脚本将返回一条警告消息,要求用户输入有效的文件名。文件的 url 将使用getUrl() 方法收集,并将用于构建公式。

注意

在这种情况下,当检索具有输入名称的文件时,将仅使用第一个结果,因为假定您没有多个同名文件。

如果你想让这个脚本更准确,你也可以把你需要的所有文件放在一个特定的文件夹中,然后使用相同的方法检索它们。检索文件时,您还可以检查他们的MIME TYPE 并确保它们是电子表格而不是其他文件类型。您还必须为这些名称使用唯一名称。

此外,此脚本中使用的公式只是一个IMPORTRANGE 公式,但您可以随意自定义它并选择您希望设置公式的范围。

参考

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-23
    • 1970-01-01
    • 2016-05-05
    • 1970-01-01
    相关资源
    最近更新 更多