如何将单元格电子表格中的URL提取到字符串并使用DocumentApp.openByUrl

时间:2018-06-18 09:43:07

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

在电子表格单元格中,我有一个指向Google文档的链接,我想恢复它以便打开Goog​​le文档并对其进行修改。所以在我的单元格中我放了这个格式https://docs.google.com/document/d/1Gb48I ......(最后没有/ edit)我试过了

            var body = '=HYPERLINK("'data[n][COLUMN_URL-1]'+'/edit'")'.getBody();
            var body = '=HYPERLINK("'data[n][COLUMN_URL-1]'+'/edit'")'.getBody();

           // this one works but I want to use data[n][COLUMN_URL-1] because I have several Google Docs links
var body = DocumentApp.openByUrl('https://docs.google.com/document/d/1Gb48IXos......../edit').getBody(); 
            if(body){
//edit the Google doc

如果你有想法要做什么,谢谢你,因为/ edit(第3行代码)的串联起作用

编辑:单元格未格式化(超链接)/公式我只有https:// ...

编辑2:我尝试过来自Suhail Ansari的代码,谢谢你,但我有一个错误,文件丢失了,如果你有其他想法,我没有任何日志:

var COLUMN_URL = 10 ;

function getIdFrom(url) {
  var id = "";
  var parts = url.split(/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/);
  if (url.indexOf('?id=') >= 0){
    id = (parts[6].split("=")[1]).replace("&usp","");
    return id;
  } else {
    id = parts[5].split("/");
    //Using sort to get the id as it is the longest element. 
    var sortArr = id.sort(function(a,b){return b.length - a.length});
    id = sortArr[0];
    return id;
  }
}

var sheet = SpreadsheetApp.openById(SPREADSHEET_ID).getSheetByName(SHEET_NAME);
  var numRows = sheet.getLastRow();
  var lastColumn = sheet.getLastColumn();
  var data = sheet.getRange(1,1,numRows,lastColumn).getDisplayValues();
   for(n=1;n < data.length;n++) {
  var URL =data[n][COLUMN_URL-1];
        Logger.log('The URL  ',URL);
        var id = getIdFrom(URL);
        Logger.log('The ID  ',id);
        var body = DocumentApp.openById(id).getBody();
        
        
        if(body)
        {......//edit Google Doc

这是包含Google文档 here

中的网址的10列

事实上,我有docs.google.com/open?id=1qo0B_HCbjcBrYyJ ...作为我尝试手工为第3行设置的其他行的网址,如图所示

编辑3:所以我在这一刻非常困惑,因为我在电子表格中的专栏来自一个循环,我将Google Docs的URL放在单元格中,如下所示:var trange = sheet.getRange.. trange.setValue(doc.getUrl());现在如果我看看表格我有这种格式的链接

  

https://docs.google.com/open?id=1RYRVotAq6IOz5tys1krnENfgN_pU0KYuUzR24i   所以现在如果我想要取回Google Doc,我有以下内容:

 //  var body = DocumentApp.openByUrl('https://docs.google.com/open?id=1Xb4QjiWwpn2TJ8-9kkIhU6m1rgmb48g6xYVopN').getBody();
            //var body = DocumentApp.openByUrl('https://docs.google.com/1Xb4QjiWwpn2TJ8-9kkIhU6m1rgmb48g6xYVopN/edit').getBody();
            var body = DocumentApp.openByUrl('https://docs.google.com/document/d/1Xb4QjiWwpn2TJ8-9kkIhU6m1rgmb48g6xYVopN/edit').getBody();

  

只有第三个人工作。我做错了什么?因为我想要   for(n = 1; n&lt; data.length; n ++){...为一个循环和var URL =   数据[N] [COLUMN_URL-1];

1 个答案:

答案 0 :(得分:1)

您可以添加一些代码以从网址获取文档ID,然后使用

打开文档
DocumentApp.openById(id);

这是link

以下示例代码在上述链接答案的帮助下:

function myFunction() {
  var URL = SpreadsheetApp.getActiveSheet().getRange('A1').getValue();
  var id = getIdFrom(URL);

  var doc = DocumentApp.openById(id);

  var body = doc.getBody();
  Logger.log(body.getText());
}


function getIdFrom(url) {
  var id = "";
  var parts = url.split(/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/);
  if (url.indexOf('?id=') >= 0){
     id = (parts[6].split("=")[1]).replace("&usp","");
     return id;
   } else {
   id = parts[5].split("/");
   //Using sort to get the id as it is the longest element. 
   var sortArr = id.sort(function(a,b){return b.length - a.length});
   id = sortArr[0];
   return id;
   }
 }

Demo Google Sheet