-1

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

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

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

文件 ==> 发布到网络。

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

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

2 回答 2

1

编辑:

正如 tehhowch 的评论,您的答案已经在 SO 上。这个答案来自STTP Smart Triathlon Training on SO question how to publish to the web a spreadsheet using drive API and GAS

您必须首先从控制台 API 激活 Drive API(请参阅启用驱动器平台)并在您的脚本中激活它(资源 > Google 高级服务 > 单击“驱动器 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); 
}

第一个答案:

文档页面所示,您可以使用File.setSharing(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();

您不能通过这种方法只共享一张纸,但您可以制作一些东西。

另请参见File.getFileById(id)SpreadsheetApp.getUrl()SpreadsheetApp.getId()

于 2018-04-10T14:35:56.673 回答
0

根据 Pierre 的输入来回答 Preston 关于如何获取新发布网页的 url 的问题:

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');
  
}

于 2020-05-31T13:27:23.563 回答