如何将URL/超链接数据从Google表格提取到Google脚本

问题描述 投票:0回答:1

我是谷歌脚本新手...

我在谷歌工作表中有一个阅读列表,我正在尝试使用谷歌脚本从工作表中提取数据以表格格式显示。表格的大部分内容都显示正确,甚至将出版物的标题作为超链接,但超链接似乎没有发挥应有的作用,因为它们没有去任何地方......非常感谢任何建议!

here is the table

here is the google sheet table

<script>
  /*
  * THIS FUNCTION CALLS THE getData() FUNCTION IN THE Code.gs FILE,
  * AND PASSES RETURNED DATA TO showData() FUNCTION
  */
  google.script.run.withSuccessHandler(showData).getData();

  // THIS FUNCTION GENERATES THE DATA TABLE FROM THE DATA ARRAY
  function showData(dataArray){
    $(document).ready(function(){
      $('#data-table').DataTable({
        data: dataArray,
        // CHANGE THE TABLE HEADINGS BELOW TO MATCH WITH YOUR SELECTED DATA RANGE
        columns: [
          {
            "title": "Title",
            "render": function(data, type, row, meta){
              if(type === 'display'){
                // Assuming each row has a unique URL in the first element of the row array
                data = '<a href="' + row[0] + '">' + data + '</a>';
              }
              return data;
            }
          },
          {"title": "Author(s)"},
          {"title": "Type"},
          {"title": "Source"},
          {"title": "Reason"},
        ]
      });
    });
  }
</script>

我试图让表格的第一列将 URL 数据从 google 表格表拉到 google 脚本,并成为一个有效的超链接,但当我点击它时,它不会去任何地方

google-sheets google-apps-script url html-table hyperlink
1个回答
0
投票

修改要点:

  • 从您的回复中,我注意到您的

    getData()
    的Google Apps脚本如下。

    function getData() {
      var spreadSheetId = "###";
      var dataRange = "Sheet1!A2:F";
      var range = Sheets.Spreadsheets.Values.get(spreadSheetId, dataRange);
      var values = range.values;
      return values;
    }
    
  • 从您显示的电子表格图像中,我认为“A”列的单元格值是带有超链接的文本。在这种情况下,当使用

    Sheets.Spreadsheets.Values.get
    时,超链接不会包含在响应值中。我认为这就是您当前问题的原因。

  • 为了检索文本和超链接,这里使用了RichText。

当这些点都体现在你的脚本中时,下面的修改如何?

Google Apps 脚本:

请设置您的电子表格 ID。

function getData() {
  var spreadSheetId = "###";
  var sheet = SpreadsheetApp.openById(spreadSheetId).getSheetByName("Sheet1");
  var range = sheet.getRange("A2:F" + sheet.getLastRow());
  var values = range.getRichTextValues().map(r => r.map(c => {
    var text = c.getText();
    var url = c.getLinkUrl();
    return url ? `<a href="${url}">${text}</a>` : text;
  }));
  return values;
}
  • 通过此修改,“A”列的值为
    <a href="${url}">${text}</a>
    。这与数据表一起使用。
  • 如果您想在新标签页中打开该网址,请将
    return url ? `<a href="${url}">${text}</a>` : text;
    修改为
    return url ? `<a href="${url}" target="_blank">${text}</a>` : text;
  • 在您的情况下,它是“A2:E”而不是“A2:F”?

HTML:

<script>
  /*
  * THIS FUNCTION CALLS THE getData() FUNCTION IN THE Code.gs FILE,
  * AND PASSES RETURNED DATA TO showData() FUNCTION
  */
  google.script.run.withSuccessHandler(showData).getData();

  // THIS FUNCTION GENERATES THE DATA TABLE FROM THE DATA ARRAY
  function showData(dataArray){
    $(document).ready(function(){
      $('#data-table').DataTable({
        data: dataArray,
        // CHANGE THE TABLE HEADINGS BELOW TO MATCH WITH YOUR SELECTED DATA RANGE
        columns: [
          {"title": "Title"},
          {"title": "Author(s)"},
          {"title": "Type"},
          {"title": "Source"},
          {"title": "Reason"},
        ]
      });
    });
  }
</script>

注:

  • 虽然我不确定您的实际情况,但如果您使用的是Web Apps,请将最新的脚本反映到Web Apps中,然后再次测试。请注意这一点。
© www.soinside.com 2019 - 2024. All rights reserved.