找不到方法open()

时间:2012-12-03 02:44:08

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

无法找到方法open()

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

    SpreadsheetApp.openById(id).getUrl()
    

    但我无法理解如果我没有ID来挂起它我应该如何获取URL ...导致捕获22.此外,我假设在事件中我得到了URL我仍然需要解析它来获取ID ...他们为那个特定的咒语提供了什么神奇的方法?

  3. 显然,我的理解是缺乏的。有什么帮助吗?

    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()方法无法工作的事实,我该如何打开文件呢?”我期望从社区收到的假定答案是“使用openByID()”。

    这导致了第四个问题,即“我从哪里获得身份证?”。明显的答案似乎是“getURL()”。

    这导致第五个问题是“我如何使用getURL()?” getURL似乎需要一个ID。如果getURL需要ID来获取URL,并且openByID需要URL来获取ID,那么您将拥有无限循环。当然,我误解了一些事情。

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

    我希望澄清我的问题。

1 个答案:

答案 0 :(得分: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
    }

电子表格及其代码为is available here,因此您可以自行测试,我将其命名为thisisthesheetIwant,希望您没有任何类似名称或内容的文件,因为它不能用作我预计如果返回的文件超过1个。

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

表单本身就是这样的:

enter image description here

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

打开相同的电子表格
SpreadsheetApp.openById(fileId)