-1

找不到方法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 与返回的字符串的其余部分区分开来?”

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

4

1 回答 1

4

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

第一件事:

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
    }

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

看看记录器,我希望它能回答你的问题。它应该如下所示: 在此处输入图像描述

工作表本身是这样的:

在此处输入图像描述

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

SpreadsheetApp.openById(fileId)
于 2012-12-14T16:59:19.520 回答