【问题标题】:How to import data from another Google Sheet using Google Script without using Spreadsheet ID如何在不使用电子表格 ID 的情况下使用 Google 脚本从另一个 Google 表格导入数据
【发布时间】:2020-06-11 09:39:52
【问题描述】:

我有一个 Google 脚本,可以将我的数据范围从一个 Google 表格导入到另一个 Google 表格,并且它运行良好。

然而,我的问题是原始数据表每天都会由第三方 (CloudHQ) 更新,它会替换原始版本,这意味着会创建一个新的电子表格 ID,这会导致该脚本每天都不正确。

有没有办法通过另一种谷歌脚本方法通过使用文件名或文件位置等常量来导入数据范围?

请在下面找到我的代码:

    var sourceSpreadsheetID = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
    var sourceWorksheetName = "CustomSheetName1";
    var targetSpreadsheetID = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
    var targetWorksheetName = "Sheet1";

function importData1() {
  var thisSpreadsheet = SpreadsheetApp.openById(sourceSpreadsheetID);
  var thisWorksheet = thisSpreadsheet.getSheetByName(sourceWorksheetName);
  //var thisData = thisWorksheet.getDataRange();
  var thisData = thisSpreadsheet.getRangeByName("B:B");

  var toSpreadsheet = SpreadsheetApp.openById(targetSpreadsheetID);
  var toWorksheet = toSpreadsheet.getSheetByName(targetWorksheetName);
  var toRange = toWorksheet.getRange(1, 1, thisData.getNumRows(), thisData.getNumColumns())
  toRange.setValues(thisData.getValues()); 
}

【问题讨论】:

  • 您是第三方替换电子表格中包含的工作表还是整个电子表格(源或目标)?如果是后者,电子表格名称和包含它的文件夹是否仍然相同,并且同一文件夹中只有一个具有此名称的电子表格?
  • 尝试查看 DriveApp 参考。那应该让你继续前进。 developers.google.com/apps-script/reference/drive/drive-app
  • @ziganotschka 它替换了整个电子表格。没错,是的,文件名完全相同,并且该文件夹中只有 1 个具有该名称的文件。
  • 如何从“thisWorksheet”中获取特定范围的数据?我想获取“B1:B21”的数据

标签: javascript google-apps-script google-sheets google-drive-api


【解决方案1】:

您需要浏览您的云端硬盘以查找具有给定名称的文件并找出其 ID

用于检索源电子表格 ID 的示例

  var fileName = "PASTE HERE THE NAME OF YOUR SOURCE SPREDSHEET";
  var file = DriveApp.getFilesByName(fileName).next();
  var sourceSpreadsheetID = file.getId();
  var sourceWorksheetName = "CustomSheetName1";
  var targetSpreadsheetID = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
  var targetWorksheetName = "Sheet1";

  function importData1() {
    var thisSpreadsheet = SpreadsheetApp.openById(sourceSpreadsheetID);
    var thisWorksheet = thisSpreadsheet.getSheetByName(sourceWorksheetName);
    //var thisData = thisWorksheet.getDataRange();
    var thisData = thisSpreadsheet.getRangeByName("B:B");

    var toSpreadsheet = SpreadsheetApp.openById(targetSpreadsheetID);
    var toWorksheet = toSpreadsheet.getSheetByName(targetWorksheetName);
    var toRange = toWorksheet.getRange(1, 1, thisData.getNumRows(), thisData.getNumColumns())
    toRange.setValues(thisData.getValues()); 
  }

如果是您要检索的目标电子表格的 ID,请分别继续。

【讨论】:

  • 谢谢@ziganotschka。出于某种原因,数据并未使用当前数据进行更新,但它似乎是从已移至 Google 驱动器箱的版本中获取的。
  • 这意味着您的驱动器上有多个同名文件。在这种情况下,区分文件的唯一方法是将您感兴趣的文件放在指定的文件夹中(使用已知名称或更好的名称 - id)。在这种情况下,您可以指定在哪个文件夹中查找文件。否则,请确保您的驱动器上的 bin 或任何地方都没有同名的版本。
  • 啊,是的,这是有道理的。我如何告诉它要查看哪个文件夹?我的文件夹名称叫做“Run Data 2020”。
  • 来自参考:getFoldersByName(name)
  • @ziganotschka 设法修复了错误。原来在我有权访问的共享文件夹中有一个同名文件。将我的文件重命名为非常独特的名称,现在已解决。非常感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多