更改Google Doc中的链接表源

时间:2019-02-01 03:56:21

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

感谢我对此提供的任何帮助。

我正在使用脚本自动将电子表格中的内容推送到文档,作为一种超级邮件合并。更改文档中的文本没问题,但是事实证明,要使文档中的表正常运行,会更加困难。

文档中的每个表都链接到电子表格。在运气有限的情况下,我正在尝试执行以下任一操作:

  • 将文档中的源表从一个电子表格更改为另一个电子表格,然后更新所有值。
  • 更新文档上的所有源表,然后取消与源的链接。
  • 直接将范围从电子表格复制到文档。

到目前为止我还没有运气。下面的代码是我要做的。 getLinkUrl()属性为文档中找到的每个表返回null。任何指针将不胜感激。

function updateTables(documentID,spreadsheetID){

  var ui = SpreadsheetApp.getUi();

//Check if input was passed
  if(documentID === undefined){
    var documentURL = ui.prompt('Table Update Module','Please enter the url of the document you wish to update tables on.', ui.ButtonSet.OK_CANCEL);
//Check for cancel
    if(documentURL.getSelectedButton() == ui.Button.OK){ 
      documentID = getIdFromUrl(documentURL.getResponseText());
    }else{
      Logger.log('Exit when asked for document URL.');
      return;}
  }
  Logger.log('Replacement document ID: ' + documentID);

//Check if input was passed
  if(spreadsheetID === undefined){
    var spreadsheetURL = ui.prompt('Table Update Module','Please enter the url of the spreadsheet you wish to get the tables from.', ui.ButtonSet.OK_CANCEL);
//Check for cancel
    if(spreadsheetURL.getSelectedButton() == ui.Button.OK){ 
      spreadsheetID = getIdFromUrl(spreadsheetURL.getResponseText());
    }else{
      Logger.log('Exit when asked for spreadsheet URL.');
      return;}
  }
  Logger.log('Replacement spreadsheet ID: ' + spreadsheetID);

//Get tables
  var documentTables = DocumentApp.openById(documentID).getBody().getTables();

//Loop through tables
  for(var i = 0; i < documentTables.length; ++i){
    Logger.log('Table URL: ' + documentTables[i].getLinkUrl());
  }  
}

1 个答案:

答案 0 :(得分:0)

设置表的链接URL并不意味着任何自动数据更新。这只是到其他资源的超链接,仅此而已。如果您之前未使用Table.setLinkUrl()方法显式设置链接,则每次调用Table.getLinkUrl()都会得到 null

下面是具有至少1个表的文档的示例代码,其中该方法返回字符串值,而不是 null

function getLinkUrl() {
  var doc = DocumentApp.getActiveDocument();
  var tables = doc.getBody().getTables();
  tables[0].setLinkUrl('https://stackoverflow.com');
  Logger.log(tables[0].getLinkUrl());
}