当前位置: 首页 > 知识库问答 >
问题:

创建Google Sheet,然后通过Google Apps Script发布

公良修竹
2023-03-14

使用Google Apps脚本,我知道如何创建新工作表:

var newSheet = SpreadsheetApp.create("newSheet");

我知道如何从创建的工作表中手工发布此工作表:

文件==

但是,如果没有上面的点/单击方法,我如何发布和获取我创建的已发布工作表的URL?我想要一段类似的代码:

var newSheet = SpreadsheetApp.create("newSheet");
var pubSheet = newSheet.publish(); 
var pubURL   = pubSheet.getURL();  

共有2个答案

刁璞
2023-03-14

基于皮埃尔的输入,回答普雷斯顿关于如何获取新发布网页的网址的问题:

url将遵循https://docs.google.com/spreadsheets/d/fileId/pubhtml格式。感谢@tanaike的这一见解。

下面是我如何获取Pierre提供的代码,并使用它来发布活动工作表,然后将发布的url粘贴到另一个工作表的自由单元格中。

function getFirstEmptyRow() {
  var spr = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Zapier");
  var column = spr.getRange('A:A');
  var values = column.getValues(); // get all data in one call
  var ct = 0;
  while ( values[ct][0] != "" ) {
    ct++;
  }
  //Browser.msgBox(ct);
  return (ct+1);
}

function publishToWeb(){ 
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var fileId = ss.getId();
  var revisions = Drive.Revisions.list(fileId); 
  var items = revisions.items; 
  var revisionId =items[items.length-1].id; 
  var resource = Drive.Revisions.get(fileId, revisionId); 
  resource.published = true;
  resource.publishAuto = true;
  resource.publishedOutsideDomain = true;
  Drive.Revisions.update(resource, fileId, revisionId);
  
  
  
  var row = getFirstEmptyRow();
  var zapier = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Zapier");
  
  var url = zapier.getRange(row, 2);

  url.setValue('https://docs.google.com/spreadsheets/d/'+fileId+'/pubhtml');
  
}
洪凯定
2023-03-14

正如tehhowch所说,你的答案已经是如此。这个答案来自STTP Smart Triathlon Training关于如何使用驱动API和GAS向web发布电子表格的问题

您必须首先从控制台API激活驱动器API(请参阅启用驱动器平台),然后在脚本中激活它(参考资料)

//this function publish to the web the document given by ID (google sheets or docs)
function publishToWeb(){ 
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var fileId = ss.getId();
  var revisions = Drive.Revisions.list(fileId); 
  var items = revisions.items; 
  var revisionId =items[items.length-1].id; 
  var resource = Drive.Revisions.get(fileId, revisionId); 
  resource.published = true;
  resource.publishAuto = true;
  resource.publishedOutsideDomain = true;
  Drive.Revisions.update(resource, fileId, revisionId); 
}

如文档页面所示,您可以使用该文件。设置共享(accessType、permissionType)方法,如:

// Get Spreadsheet and Id
var ss = SpreadsheetApp.getActiveSpreadsheet();
var id = ss.getId();

// Get the file object with the Spreadsheet Id
var file = File.getFileById(id);
// Set sharing parameters so ANYONE can VIEW this spreadsheet
file.setSharing(DriveApp.Access.ANYONE, DriveApp.Permission.VIEW);
// Get the Spreadsheet url, who is now accessible by anyone
var url = ss.getUrl();

你不能用这种方法只分享一张纸,但是你可以做一些东西。

另请参见文件。getFileById(id),电子表格应用程序。getUrl(),电子表格应用程序。getId()

 类似资料:
  • 问题内容: 我正在尝试使用Java的Google Sheet API将值写入单元格。为了阅读,我使用了Java Quickstart的指南 ,该指南对我来说效果很好。 要写入Google表格,我使用: 该函数在运行时输出以下错误: 我正在使用的身份验证范围 问题答案: 显然有几个问题在一起: 删除存储在/Users/XXX/.credentials中的凭据。 将范围更改为SheetsScopes.

  • 问题内容: 我有一个从MS-SQL2005 DB调用存储过程的Web服务。我的Web服务在对我拥有的一个存储过程的调用上超时(该过程已经生产了几个月,没有超时),因此我尝试在Query Analyzer中运行查询,该查询也超时。我决定删除并重新创建存储过程,而无需更改代码,它又开始执行。 问题: 这通常是我的存储过程的TSQL中的错误吗? -或者- 有没有人看到这并发现它是由存储过程的编译中的某些

  • 我目前正在学习Mule ESB,有一个问题困扰着我。我用React中的前端和Node.js中的后端创建了应用程序,我希望我的API通过ESB发送数据,并插入一些来自公共SOAP API的数据。然后来自REST API和SOAP API的数据将被合并到我的前端可以使用的一个endpoint中。这可能吗?有人能推荐一些我能读到更多相关信息的地方吗?我查阅了文件,但找不到这样的情况。我用的是电脑版的An

  • 问题内容: 在python中使用MySQLdb库时,如何定义多语句函数或过程? 例: 这将创建以下回溯: 如果我将相同的SQL直接复制到mysql shell客户端中,它将按预期工作 问题答案: 该命令是内置的MySQL Shell客户端,只有该程序(和MySQL查询浏览器)才能识别。如果您直接通过API执行SQL语句,则无需使用。 的目的是帮助您避免在语句本身可以包含分号字符时避免终止语句。这在

  • 我做了一个模块来钩住后台办公室产品页面中的表单(带有钩子)。我如何创建一个表单与一些输入模块? 我认为可以通过{和file}或{和file}来完成。如果有人将此解释为一个演练,我相信它也会成为许多其他人的一个很好的参考。这是由PrestaShop模块生成器创建的代码:

  • 我正在使用谷歌工作表。我有两张名为App Catgeory和目录类别。 应用类别有两列:-1.类别名称2.是可选择的 在目录类别中,我有一个类别选择下拉列表,它是从应用程序类别表的类别名称列创建的。“类别名称”列中的所有值在下拉列表中可用。下拉列表由以下数据验证公式创建:- 但是,我想要这样的类别名称在下拉列表中有是可选择的列值是在应用类别。如果是可选择的列值为否,则不需要在下拉列表中显示此类类别