簡體   English   中英

谷歌表格,應用程序腳本 parsehtml 錯誤

[英]google sheets, apps script parsehtml error

這是完整的代碼,

function extractData() {
  var url = "https://www.theopenalliance.com/teams/2023/";
  var html = UrlFetchApp.fetch(url).getContentText();
  var data = parseHtml(html);
  var sheet = SpreadsheetApp.getActiveSheet();
  sheet.clearContents();
  if (data.length > 0) {
    sheet.getRange(1, 1, data.length, data[0].length).setValues(data);
    for (var i = 0; i < data.length; i++) {
      for (var j = 0; j < data[i].length; j++) {
        if (data[i][j].indexOf("http") === 0) {
          var button = sheet.getRange(i + 1, j + 1).attachButton({
            text: "Link",
            url: data[i][j]
          });
        }
      }
    }
  }
}

function parseHtml(html) {
  var startIndex = html.indexOf("<tbody>");
  var endIndex = html.indexOf("</tbody>");
  var table = html.substring(startIndex, endIndex);
  var rows = table.split("<tr>");
  var data = [];
  for (var i = 1; i < rows.length; i++) {
    var cells = rows[i].split("<td");
    var row = [];
    for (var j = 1; j < cells.length; j++) {
      var cell = cells[j];
      var linkStartIndex = cell.indexOf("href=");
      if (linkStartIndex !== -1) {
        var linkEndIndex = cell.indexOf("class");
        var link = cell.substring(linkStartIndex + 6, linkEndIndex - 2);
        row.push(link);
      } else {
        row.push(cell.substring(cell.indexOf(">") + 1, cell.indexOf("</td>")));
      }
    }
    data.push(row);
  }
  return data;
} 

然而 function parseHtml(html)給出了這一行的錯誤

var startIndex = html.indexOf("<tbody>");

有人有什么建議嗎? 我正在嘗試將表格從鏈接復制並粘貼到谷歌表格。

我希望在谷歌表格中看到每個團隊的號碼和其他值(公共鏈接、位置等),但什么也沒有顯示。 如果按鈕存在,例如 github、照片等,我還希望看到附有鏈接的按鈕。請檢查鏈接,我相信您會對我試圖講述的內容有更好的了解。 也請幫我修復代碼,如果可能的話,復制並編輯代碼而不是重新發布,我將不勝感激

在您的情況下,使用 Sheets API 怎么樣? 因為我認為 Sheets API 的 HTML 解析器對您的情況很有用。 當Sheets API用於你的URL時,下面的示例腳本怎么樣?

示例腳本:

在使用此腳本之前, 請在 Advanced Google services 中啟用 Sheets API

function myFunction() {
  const url = "https://www.theopenalliance.com/teams/2023/"; // This is from your script.

  const html = UrlFetchApp.fetch(url).getContentText();
  const table = html.match(/<table[\s\S\w]+?<\/table>/);
  if (!table) {
    throw new Error("Table was not found.");
  }
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getActiveSheet().clearContents();
  SpreadsheetApp.flush();
  const requests = { requests: [{ pasteData: { html: true, data: table[0], coordinate: { sheetId: sheet.getSheetId() } } }] };
  Sheets.Spreadsheets.batchUpdate(requests, ss.getId());
}
  • 運行此腳本時,會從 URL 中檢索一個表並將其放入活動表中。

參考:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2025 STACKOOM.COM