【问题标题】:when folder script is run it overrides the old hyperlinks运行文件夹脚本时,它会覆盖旧的超链接
【发布时间】:2023-03-13 06:21:01
【问题描述】:

以下脚本用于创建用于项目的文件夹,

问题是当脚本第二次运行时,它会删除第一次创建的先前创建的超链接,但文件夹仍保留在父文件夹中

单元格中仍然存在的文件夹从 =HYPERLINK("insert folder link", "J10447") 变为 =HYPERLINK("undefined", "J10447")

function creatFolder() {
  const parent = DriveApp.getFolderById("insert folder id");
  const sheet = SpreadsheetApp.getActive().getSheetByName('Detailing');
  const range = sheet.getRange(2, 1, sheet.getLastRow() - 2);
  range.getValues().forEach(function (row, index) {
    // Consider checking if this r & c has a formula in the equal size array from getFormulas()
    if(row[0]) {
      var newLink = getLinkForFolderName_(parent, row[0]);
      // Use the current array index to write this formula in only the correct cell.
      range.offset(index, 0, 1).setFormula(
        "HYPERLINK(\"" + newLink + "\", \"" + row[0] + "\")"
      );
    }
  });
}



function getLinkForFolderName_(root, name) {
  var folder;
  const search = root.getFoldersByName(name);
  if (search.hasNext()) {
    folder = search.next();
    if (search.hasNext())
      console.warn("Multiple folders named '" + name + "' in root folder '" + root.getName() + "'");
  }
  else {
  folder = root.createFolder(name);
  ["Quotes", "Construction dwg's", "Window Schedule", "Data File", "Delivery Photos"].forEach(function(e) {
    folder.createFolder(e);
  });
    return folder.getUrl();
}
}

【问题讨论】:

  • 使用状态栏让您现在已经创建了超链接
  • 您是否尝试过在调用getLinkForFolderName_ 之前先使用getFormula() 检查单元格上的公式?这样,如果您现有的公式已经很好,您可以跳过再次设置公式。

标签: google-apps-script google-sheets google-drive-api


【解决方案1】:

我根据 Cooper 的评论对问题进行了临时修复,所以现在超链接在 A 列中创建,然后它被移动到 B 列,然后导致 A 列被删除

以下是更新后的脚本,以防有人想使用它,我会尝试找出更好的方法并在发生时发布它

function creatFoder() {
  const parent = DriveApp.getFolderById("insert folder id");
  const sheet = SpreadsheetApp.getActive().getSheetByName('Detailing');
  const range = sheet.getRange(1, 1, sheet.getLastRow() - 2);
  range.getValues().forEach(function (row, index) {
    // Consider checking if this r & c has a formula in the equal size array from getFormulas()
    if(row[0]) {
      var newLink = getLinkForFolderName_(parent, row[0]);
      // Use the current array index to write this formula in only the correct cell.
      range.offset(index, 1, 1).setFormula(
        "HYPERLINK(\"" + newLink + "\", \"" + row[0] + "\")"
      );
    }
  });
  sheet.getRange("A2:A").clear();
}



function getLinkForFolderName_(root, name) {
  var folder;
  const search = root.getFoldersByName(name);
  if (search.hasNext()) {
    folder = search.next();
    if (search.hasNext())
      console.warn("Multiple folders named '" + name + "' in root folder '" + root.getName() + "'");
  }
  else {
  folder = root.createFolder(name);
  ["Quotes", "Construction dwg's", "Window Schedule", "Data File", "Delivery Photos"].forEach(function(e) {
    folder.createFolder(e);
  });
    return folder.getUrl();
}
}

【讨论】:

    猜你喜欢
    • 2021-07-04
    • 1970-01-01
    • 2018-08-08
    • 1970-01-01
    • 2015-12-15
    • 2014-04-30
    • 2021-08-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多