【问题标题】:Preserve a hyperlink URL when using JS to copy a link in a cell to another sheet使用 JS 将单元格中的链接复制到另一个工作表时保留超链接 URL
【发布时间】:2016-02-13 08:40:36
【问题描述】:

在我的电子表格中,参考点 (28, 9) 处的单元格包含一个超链接。然后,该代码将该单元格的内容复制到同一电子表格中的另一张工作表中。现在它将复制文本,但新单元格仅包含文本而不包含超链接属性。有没有办法通过传输保留超链接?我尝试查找超链接信息,但找不到答案……或者至少没有我理解的答案。我只编码了大约 2 周,所以还不是很了解。这是我的代码:

function submitButtonClick() {   
  
  var ss = SpreadsheetApp.getActive();
  var sheet = ss.getActiveSheet();
  
  Logger.log('sheet.getName(): ' + sheet.getName());
  
  
  if (sheet.getName() !== "SubmitReceipt") {return;};
  
  var targetSheet = ss.getSheetByName("ReceiptRecord");
  
  var arrayOfData = [];
   
  var week = sheet.getRange(6,9).getValue();
  var emplN = sheet.getRange(4,9).getValue();
  var purDate = sheet.getRange(9,9).getValue();
  var purFrom = sheet.getRange(11,9).getValue();
  var custC = sheet.getRange(14,9).getValue();
  var deptC = sheet.getRange(16,9).getValue();
  var lotC = sheet.getRange(18,9).getValue();
  var laborC = sheet.getRange(20,9).getValue();
  var itemC = sheet.getRange(22,9).getValue();
  var hyperL = sheet.getRange(28,9).getValue();
  var notes = sheet.getRange(44,8).getValue();
  
  arrayOfData[0] = week;
  arrayOfData[1] = emplN;
  arrayOfData[2] = purDate;
  arrayOfData[3] = purFrom;
  arrayOfData[4] = custC;
  arrayOfData[5] = deptC;
  arrayOfData[6] = lotC;
  arrayOfData[7] = laborC;
  arrayOfData[8] = itemC;
  arrayOfData[9] = notes;
  arrayOfData[10] = hyperL;
  
  Logger.log('arrayOfData '+ arrayOfData)
  
  var lastRow = targetSheet.getLastRow();
  
  Logger.log('lastRow: ' + lastRow);
  Logger.log('arraylength ' + arrayOfData.length);
  
  targetSheet.getRange(lastRow+1, 1, 1, arrayOfData.length).setValues([arrayOfData]);


  sheet.getRange(9,9).clearContent();
  sheet.getRange(11,9).clearContent();
  sheet.getRange(14,9).clearContent();
  sheet.getRange(16,9).clearContent();
  sheet.getRange(18,9).clearContent();
  sheet.getRange(20,9).clearContent();
  sheet.getRange(22,9).clearContent();
  sheet.getRange(28,9).clearContent();
  sheet.getRange(44,8).clearContent();
  
}
  

提前感谢您的帮助。

更新:我确实找到了一个可能的解决方案并尝试了它,但随后出现错误“TypeError: Cannot find function getFormulaR1C1 in object Sample Receipt 6.jpg。(第 26 行,文件“提交记录”)。”

这是更新后的第 26 行,以显示我尝试过的新解决方案:

  var url = hyperL.getFormulaR1C1();

再次感谢您的帮助。

【问题讨论】:

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


    【解决方案1】:

    我想通了。请注意“//Changes”cmets 之间的差异。

    function submitButtonClick() {   
      
      var ss = SpreadsheetApp.getActive();
      var sheet = ss.getActiveSheet();
      
      Logger.log('sheet.getName(): ' + sheet.getName());
      
      
      if (sheet.getName() !== "SubmitReceipt") {return;};
      
      var targetSheet = ss.getSheetByName("ReceiptRecord");
      
      var arrayOfData = [];
       
      var week = sheet.getRange(6,9).getValue();
      var emplN = sheet.getRange(4,9).getValue();
      var purDate = sheet.getRange(9,9).getValue();
      var purFrom = sheet.getRange(11,9).getValue();
      var custC = sheet.getRange(14,9).getValue();
      var deptC = sheet.getRange(16,9).getValue();
      var lotC = sheet.getRange(18,9).getValue();
      var laborC = sheet.getRange(20,9).getValue();
      var itemC = sheet.getRange(22,9).getValue();
      var hyperL = sheet.getRange(28,9).getValue();
      var notes = sheet.getRange(44,8).getValue();
      
      
      
      
      //Changes
      
      var range = SpreadsheetApp.getActiveSheet().getRange(28,9,1,3);
      
      Logger.log('range= ' + range.getValue());
      
      Logger.log('hyperlink: ' + range.getFormulaR1C1());
      
      var url = /"(.*?)"/.exec(range.getFormulaR1C1())[1];
      
      Logger.log('url: ' + url);
      
      //Changes
      
      
      
      arrayOfData[0] = week;
      arrayOfData[1] = emplN;
      arrayOfData[2] = purDate;
      arrayOfData[3] = purFrom;
      arrayOfData[4] = custC;
      arrayOfData[5] = deptC;
      arrayOfData[6] = lotC;
      arrayOfData[7] = laborC;
      arrayOfData[8] = itemC;
      arrayOfData[9] = notes;
      arrayOfData[10] = hyperL;
      arrayOfData[11] = url;
      
      Logger.log('arrayOfData '+ arrayOfData)
      
      var lastRow = targetSheet.getLastRow();
      
      Logger.log('lastRow: ' + lastRow);
      Logger.log('arraylength ' + arrayOfData.length);
      
      targetSheet.getRange(lastRow+1, 1, 1, arrayOfData.length).setValues([arrayOfData]);
    
    
      sheet.getRange(9,9).clearContent();
      sheet.getRange(11,9).clearContent();
      sheet.getRange(14,9).clearContent();
      sheet.getRange(16,9).clearContent();
      sheet.getRange(18,9).clearContent();
      sheet.getRange(20,9).clearContent();
      sheet.getRange(22,9).clearContent();
      sheet.getRange(28,9).clearContent();
      sheet.getRange(44,8).clearContent();
      
    }
      

    【讨论】:

    • 您可以创建一个行数组来获取:var arrayRowsToGet = [6,4,9,11,14,16,18,etc]; 然后遍历该数组:var thisLoopValue = "", theCellValue; for (var i=0;i<arrayRowsToGet.length;i+=1) {thisLoopValue = arrayRowsToGet[i]; theCellValue = sheet.getRange(thisLoopValue,9).getValue(); arrayOfData[i].push(theCellValue);};,而不是为每个值单独编写代码行
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-18
    • 2014-03-28
    • 2021-05-12
    • 2020-04-25
    • 2020-03-04
    • 2017-09-29
    • 1970-01-01
    相关资源
    最近更新 更多