Google apps script 取消与图纸的所有超链接

Google apps script 取消与图纸的所有超链接,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我正在尝试在Google电子表格中取消所有超链接,目前为止我正在尝试搜索并替换下面的代码,但是想知道是否有一个特定的函数来取消链接 function replacelinks(){ var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Links"); var values = sheet.getDataRange().getValues(); replaceInSheet(values, '.com'

我正在尝试在Google电子表格中取消所有超链接,目前为止我正在尝试搜索并替换下面的代码,但是想知道是否有一个特定的函数来取消链接

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


我相信你的目标如下

  • 您希望使用Google Apps脚本删除Google电子表格中工作表上的所有超链接
对于这个问题,这个答案如何

修改点:
  • 不幸的是,在现阶段,似乎没有直接删除单元格和文本超链接的方法。因此,为了实现您的目标,我想提出一个解决方案。此解决方案的流程如下所示

  • 将要删除Google电子表格中超链接的工作表复制为临时工作表
  • 从源工作表的数据范围中检索RichTextValue
  • 检索包含超链接的单元坐标,并创建一个对象,以便使用Sheets API中的batchUpdate方法
  • 使用创建的对象请求batchUpdate方法。
    • 源工作表上具有超链接的单元格将被清除,相同坐标的值将从时间工作表复制到源工作表。这样,超链接就被删除了
示例脚本: 请将以下脚本复制并粘贴到脚本编辑器中。及。请设置要删除超链接的工作表名称

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()
    方法未包含在正式文件中。因此,我也认为在未来的更新中可能会添加直接删除超链接的方法
参考资料:

如果您使用的是超链接公式中的链接,这很简单,但如果您使用的是richTextValue()不同的故事。似乎没有任何方法可以支持您的愿望。如果包含.com或.net,那么删除整个单词怎么样?关于如何实现这一点,您有什么想法吗?这看起来是一个非常好的解决方案。我稍后会回来阅读,当我在我的计算机上时,我喜欢您在reduce中使用forEach