簡體   English   中英

取消鏈接工作表的所有超鏈接

[英]Unlink all hyperlinks from a sheet

我正在嘗試取消鏈接 Google 電子表格中的所有超鏈接,到目前為止,我正在嘗試進行搜索並替換下面的代碼,但想知道是否有特定的 function 來執行取消鏈接?

function replacelinks(){
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Links");
  var values = sheet.getDataRange().getValues();  
  replaceInSheet(values, '.com', '');
  replaceInSheet(values, '.net', '');

我相信你的目標如下。

  • 您想使用 Google Apps 腳本刪除 Google 電子表格中工作表上的所有超鏈接。

為此,這個答案怎么樣?

修改點:

  • 不幸的是,在現階段,似乎沒有直接刪除單元格和文本的超鏈接的方法。 因此,為了實現您的目標,我想提出一個解決方法。 此解決方法的流程如下。

    1. 將要刪除 Google 電子表格中的超鏈接的工作表復制為臨時工作表。
    2. 從源工作表的數據范圍中檢索richTextValues。
    3. 檢索具有超鏈接的單元格坐標,並創建一個 object 以使用表格 API 中的 batchUpdate 方法。
    4. 使用創建的 object 請求 batchUpdate 方法。
      • 源工作表上帶有超鏈接的單元格被清除,相同坐標的值從時態工作表復制到源工作表。 這樣,超鏈接就被刪除了。

示例腳本:

請將以下腳本復制並粘貼到腳本編輯器中。 並且, 請在高級 Google 服務中啟用表格 API 並請設置要刪除超鏈接的工作表名稱。

function myFunction() {
  const sheetName = "Sheet1"; // Please set the sheet name.

  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getSheetByName(sheetName);
  const sheetId = sheet.getSheetId();
  const range = sheet.getDataRange();
  const temp = ss.insertSheet();
  const tempId = temp.getSheetId();
  range.copyTo(temp.getRange("A1"), {contentsOnly: true});
  const requests = range.getRichTextValues().reduce((ar, row, i) => {
    row.forEach((col, j) => {
      const runs = col.getRuns();
      if (col.getLinkUrl() || (runs && runs.some(e => e.getLinkUrl()))) {
        const req1 = {updateCells:{range:{sheetId:sheetId,startRowIndex:i,endRowIndex:i + 1,startColumnIndex:j,endColumnIndex:j + 1},fields:"userEnteredValue"}};
        const req2 = {copyPaste:{
          source:{sheetId:tempId,startRowIndex:i,endRowIndex:i + 1,startColumnIndex:j,endColumnIndex:j + 1},
          destination:{sheetId:sheetId,startRowIndex:i,endRowIndex:i + 1,startColumnIndex:j,endColumnIndex:j + 1},
          pasteType:"PASTE_NORMAL"
        }};
        ar = ar.concat(req1, req2);
      }
    });
    return ar;
  }, []);
  Sheets.Spreadsheets.batchUpdate({requests: requests}, ss.getId());
  ss.deleteSheet(temp);
}
  • 在此腳本中,可以刪除帶有和不帶有HYPERLINK()的超鏈接。

筆記:

  • 在當前階段,似乎getRichTextValues()無法檢索數字值。 這樣,當數值有超鏈接時,這些超鏈接不能被刪除。 關於這個問題,我已經向問題跟蹤器報告了。 參考所以當這個問題被刪除時,我認為使用上面的腳本,所有的超鏈接都可以被刪除。 或者,現階段,上述腳本中使用的getLinkUrl()方法並未包含在官方文檔中。 所以我也認為在以后的更新中可能會增加直接刪除超鏈接的方法。

參考:

對我有幫助的是將范圍的setShowHyperlink設置為 false。

例子:

const ss = SpreadsheetApp.getActiveSpreadsheet();
const ws = ss.getActiveSheet();
const range = ws.getRange(lastRow, 1)
range.setValue('https://example.com');
range.setShowHyperlink(false);

但是一旦你雙擊這樣的單元格,谷歌就會重新應用超鏈接。

暫無
暫無

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

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