IMPORTRANGE:一个单元格内的多个超链接,将此单元格数据导入另一个 sheet 并保留单独的可点击链接

IMPORTRANGE: multiple hyperlinks within one cell, importing this cell data into another sheet and retaining separate clickable links

我目前使用 Google sheet 来保存每个项目 x1 行的数据。我使用一个特定的单元格在 (x2 网站地址) 中保存两个单独的超链接,这两个链接都与此项 relevant/in 相关。

我想保留在一个单元格中有两个单独的可点击超链接的结构,但我还需要将此单元格数据(这两个链接)导入另一个 Google sheet,有吗一种使用 IMPORTRANGE 并保留这两个独立超链接的方法(确保在一个单元格中可点击且仍为 x2 独立链接),或者在导入到另一个单元格时将它们转换为超链接 sheet?

提前致谢

我用数据创建了两个虚拟 sheets 用于测试和帮助可视化

Sheet 名称:“静态”&Sheet URL:https://docs.google.com/spreadsheets/d/1JS40eNGUAmBqQJqmdX4PhWtm6GEVQP64CoxO_DooZYM/edit#gid=0

Sheet 名称:“进口”&Sheet URL:https://docs.google.com/spreadsheets/d/1rhnULIcbkSMCp8AONa7UwTQz77uHn443VuwYjty2xFs/edit#gid=0

我用过=IMPORTRANGE("1JS40eNGUAmBqQJqmdX4PhWtm6GEVQP64CoxO_DooZYM","Static1!A1:D")

将数据从 'Static' sheet(制表符:'Static1')提取到 'Imported'(制表符:'Imported1')

我希望在 'Imported' sheet

的 'D' 列中获得可点击的链接

我添加了不同的变体,即超链接在 'Static' sheet 中重命名为“Link 1”和“Link 2”,我添加了几行有完整的 URLs 地址(没有重命名),还有几行有完整的 URLs 并且中间有一个空行 - 我不太在意它们的外观诚实(理想情况下有 'Link 1' 和 'Link 2' 会很好)但主要只是希望在同一单元格中导入 x2 URLs,在导入后 remain/become 可点击 [=16] =]

这是因为我以后也会iframe/embedding 'Imported' sheet。

谢谢

除了 IMPORTRANGE

,您还可以通过自定义函数提取 url
function extractUrls(range) {
  var activeRg = SpreadsheetApp.getActiveRange();
  var activeSht = SpreadsheetApp.getActiveSheet();
  var activeformula = activeRg.getFormula();
  var rngAddress = activeformula.match(/\((.*)\)/).pop().trim(); 
  var urls = activeSht
    .getRange(rngAddress)
    .getRichTextValue()
    .getRuns()
    .reduce((array, e) => {
      var url = e.getLinkUrl();
      if (url) array.push(url);
      return array;
    }, []);
  return ([urls])
}

编辑

你的情况

function createCopy() {
  var id = "1JS40eNGUAmBqQJqmdX4PhWtm6GEVQP64CoxO_DooZYM"
  var source = SpreadsheetApp.openById(id).getSheets()[0]
  var values = source.getRange(2,1,source.getLastRow()-1,3).getValues()
  var richTxt = source.getRange(2,4,source.getLastRow()-1,1).getRichTextValues()
  var output = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('output_v2')
  output.getRange(2, 1, values.length, values[0].length).setValues(values)
  output.getRange(2, 4, richTxt.length, richTxt[0].length).setRichTextValues(richTxt)
}

更新:

选项 1: 这相当简单。它只是将 Static1 sheet 复制到目的地 sheet 并将其命名为 Imported.

function createCopy2() {
  var ss = SpreadsheetApp.openById("1vM-0nBBlhVvRQ3vvXwkWlecENM7CVuv8iei3cl0uRQI"); 
  var ds = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('Static1');
  sheet.copyTo(ds).setName('Imported');

}

选项 2(不完整):

这就是我到目前为止所做的,但这仍然会在 var text = SpreadsheetApp.newRichTextValue().setText(linkval[i]).setLinkUrl(0,7,urls1[i]).setLinkUrl(7,13,urls2[i]).build();.

这一行引发错误 Exception: Illegal Argument

(P.S: 只是想把它扔在这里,以防有人发现这种逻辑 useful/not 浪费我练习 JS 的努力 lol)。

感谢 Mike Steelson 提供了有效的答案。

 function createCopy() {

  //Creates a full copy of the source sheet without Hyperlinks (AKA importrange in script form)
  var ss = SpreadsheetApp.openById("1vM-0nBBlhVvRQ3vvXwkWlecENM7CVuv8iei3cl0uRQI"); 
  var sheet = ss.getSheets()[0].getSheetValues(1,1, ss.getLastRow(), ss.getLastColumn());
  var ds = SpreadsheetApp.getActiveSheet();
  ds.getRange(1,1, ss.getLastRow(), ss.getLastColumn()).setValues(sheet);
  Logger.log(sheet);

  var link = ds.getRange(2,4, ss.getLastRow(), 1);
  var linkval = link.getValues();
  var urls1 = ds.getRange(2,5, ss.getLastRow(), 1).getValues();
  var urls2 = ds.getRange(2,6, ss.getLastRow(), 1).getValues();

for(i=0; i < ss.getLastRow(); i++){
 var text = SpreadsheetApp.newRichTextValue().setText(linkval[i]).setLinkUrl(0,7,urls1[i]).setLinkUrl(7,13,urls2[i]).build();  
} 
}