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();
}
}
我目前使用 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
,您还可以通过自定义函数提取 urlfunction 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();
}
}