【问题标题】:Cannot find method open()找不到方法 open()
【发布时间】:2012-12-03 02:44:07
【问题描述】:

找不到方法open()

  1. 如果找不到,为什么在我输入点的时候让我选择它?
  2. 那么我应该如何打开一个文件? openByID()?真的吗?我从哪里得到这个神奇的ID?从getURL?严重地?这是唯一出现的事情:

    SpreadsheetApp.openById(id).getUrl()
    

    但我不明白如果我没有 ID 挂起它,我应该如何获取 URL...导致捕获 22。此外,我假设我确实获得了 URL我仍然需要解析它以获取 ID……他们为那个特定的咒语提供了什么神奇的方法?

显然,我的理解不足。有什么帮助吗?

function copyTemplate() {
  var targetSpreadsheetName="The file";

  var targetSpreadsheetID=SpreadsheetApp.open(targetSpreadsheetName).getId();
  targetSpreadsheetID.insertSheet("CellData", 1, {template:temp});


  // The code below will duplicate the sheet named "CellData" and insert it after 
  // the 1st sheet and call it "CellData"
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var temp = ss.getSheetByName("CellData");
  ss.insertSheet("CellData", 1, {template:temp});
}

问题是多部分的。

返回的错误信息是“找不到方法 open()”。

第一个问题是“为什么找不到方法open()?”。

第二个问题是“如果事实上它找不到,为什么在我键入点的时候它让我选择它?”

第三个问题是“考虑到 open() 方法无法正常工作,我应该如何打开文件?”我期望从社区收到的假定答案是“with openByID()”。

这就引出了第四个问题,即“我从哪里获得 ID?”。明显的答案似乎是“getURL()”。

这就引出了第五个问题,即“如何使用 getURL()?” getURL 似乎需要一个 ID。如果 getURL 需要一个 ID 来获取 URL,而 openByID 需要一个 URL 来获取 ID,那么就会出现无限循环。我肯定误会了什么。

第六个问题是“如果 getURL() 最终成为解决方案的一部分,如何将 ID 与返回的字符串的其余部分区分开来?”

我希望这能澄清我的问题。

【问题讨论】:

  • 您的问题是如何查找电子表格 ID?

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


【解决方案1】:

好吧,我最终会尝试回答您的问题,希望您会发现它足够清楚... ;-)

第一件事:

var ss = SpreadsheetApp.open()

确实出现在点之后的自动补全中,你没有注意的是参数是一个文件,即一个适当的语句返回的对象。 现在让我们看看如何获​​取它,并通过这个例子来了解如何获取该文件的其他参数:

    function myFunction() {
    var files = DocsList.find('thisisthesheetIwant');// this is an array of file objects that include the term 'thisisthesheetIwant'
    var file = files[0];// I take the first one
    var filename = file.getName();//and get its name
    var fileId = file.getId();// its ID
    var fileurl = file.getUrl();//and its url
// then I show the results in the logger
    Logger.log('number of file found = '+files.length+'\n\n'+filename+'\n\n'+fileId+'\n\n'+fileurl+'\n\n')
    var ss = SpreadsheetApp.open(file);// using that file object I can open a spreadsheet
    var content = ss.getSheets()[0].getDataRange().getValues().toString();// and get the whole content of the first sheet
    Logger.log('content = '+content);// there it is
    }

带有代码 is available here 的电子表格,因此您可以自己测试它,我将其命名为 thisisthesheetIwant 希望您没有任何具有相似名称或内容的文件,因为如果更多,它将无法按我的预期工作返回的文件超过 1 个。

查看记录器,我希望它能回答您的问题。 它应该如下所示:

而工作表本身是这样的:

编辑:请注意,ID 和 URL 有一个共同的部分,URL 是您可以在浏览器的地址栏中看到的,ID 只是其中的一部分。 现在您可以使用

打开同一个电子表格
SpreadsheetApp.openById(fileId)

【讨论】:

  • 这看起来很棒。关于没有看到它需要文件的事实,您是部分正确的。我将其误解为文件名。直到我已经发布了我以前的 cmets,我才意识到这是它需要的文件句柄。尽管如此,即使知道它需要一个文件句柄也无济于事,因为您正确地猜到了我不知道如何获得一个,因此非常感谢您的示例。简单看一下,我相信我理解你所做的,除了 content 变量。这需要大量研究才能弄清楚。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-03
  • 2011-10-01
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多