【问题标题】:How to import data from another Google Sheet using Google Script without using Spreadsheet ID (July 2020 update stopped my code working)如何在不使用电子表格 ID 的情况下使用 Google 脚本从另一个 Google 表格导入数据(2020 年 7 月更新停止了我的代码工作)
【发布时间】:2020-07-30 10:02:41
【问题描述】:

我之前在 Stack Overflow 上询问过如何在不使用电子表格 ID 的情况下使用 Google Script 从另一个 Google Sheet 导入数据。 Previous question and the answers,得到了答复并且工作正常。现在看来,谷歌已经更新了一些东西,使它无法工作,因此在我的收件箱中发送了无法完成的错误电子邮件。

我现在收到以下错误:

异常:无法检索下一个对象:迭代器已到达末尾。 (第 2 行,文件“数据导入”)

“数据导入”是我的脚本文件的名称。

不仅如此,当我尝试在同一张工作表上运行其他脚本时,除非我完全删除此脚本,否则其他脚本也无法运行。

这是运行完美但现在停止的代码。

var folder = DriveApp.getFoldersByName("SOURCE FOLDER NAME").next();
var file = folder.getFilesByName("SOURCE FILE NAME").next();
var sourceSpreadsheetID = file.getId();
var sourceWorksheetName = "SOURCE WORKSHEET NAME";
var targetSpreadsheetID = "TARGET FILE ID";
var targetWorksheetName = "TARGET WORKSHEET NAME";

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

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

【问题讨论】:

  • var folder = DriveApp.getFolderById(id) 其中 id 是您的文件夹的 id。你可以试试这个,而不是你的第一行?文件夹的 ID 可以在您的 Google 驱动器中文件夹的 URL 中找到。
  • @MariosKaramanis 恐怕没用。值得注意的是,谷歌工作表每天都会被同名的脚本(由第三方应用程序)替换,所以我不能简单地使用获取工作表 ID 方法。但是该文件夹保持不变。
  • 同样在你的代码的第一部分你没有做任何类型的错误检查,也许你正在寻找的文件夹不存在该文件不是在该文件夹中创建的。此外,您可能有多个文件夹,但我没有看到您使用 next 方法进行迭代。您是否希望在第一个文件中得到这个?检查您的文件是否确实可以找到?

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


【解决方案1】:

恕我直言,在全局范围内使用 Google Apps 脚本调用不是一个好主意。正如您已经面临的那样,脚本中当前调用的问题使其他功能无法正常工作。

您要做的第一件事是将这些行从全局范围移动到另一个地方。您可以将它们放在 try...catch 中、它自己的函数中或 importData1() 函数声明中。

关于第2行的具体错误:

var file = folder.getFilesByName("SOURCE FILE NAME").next();

这意味着代码在文件夹中找不到名为SOURCE FILE NAME 的文件。可能文件名已更改或有效用户无权访问文件。如果在隐身模式下运行代码有效,那么问题在于运行代码的用户已在多个 Google 帐户中登录。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-14
    • 2021-03-28
    • 1970-01-01
    相关资源
    最近更新 更多