Как преобразовать Importrange ячеек в жесткие значения с помощью сценария архивации, не устанавливая источник в общий доступ Publi c - PullRequest
0 голосов
/ 06 марта 2020

Итак, у меня есть скрипт, который я собрал вместе от разных авторов, который предназначен для получения значений из формул, их закрепления в виде жестких значений в ячейке и копирования электронной таблицы в новое место со всеми удаленными формулами из обозначенных ячеек. (и только сохраненные значения).

Вот это ниже:

function onOpen() {
  var ui = SpreadsheetApp.getUi();
  // Or DocumentApp or FormApp.
  ui.createMenu('Master Menu')
      .addItem('Archive Report', 'Archiver')
      .addToUi();
}

function Archiver() {
  var spreadsheetId = "File_ID"; // Please set the source Spreadsheet ID.
  var destFolderId = "Folder_ID";  // Please set the destination folder ID.

  // Copy all the spreadsheet (formulas included)
  var ss = SpreadsheetApp.openById(spreadsheetId);
  var destination = ss.copy(ss.getName() + " - " + new Date().toLocaleString());
  var backgroundColor = "#00ff00"; // The background color you want to check for  
  destination.getSheets().forEach(function(sheet) { // Iterating through each sheet in the destination    
    var backgrounds = sheet.getDataRange().getBackgrounds(); // Getting 2-dimensional array with background colors for each cell in the sheet    
    for (var i = 0; i < backgrounds.length; i++) { // Iterating through each row
      var rowBackgrounds = backgrounds[i];      
      for (var j = 0; j < rowBackgrounds.length; j++) { // Iterating through each cell for that specific row
        var cellBackground = rowBackgrounds[j];        
        if (cellBackground === backgroundColor){ // Checking if the cell background color is the same as the specified one          
          var cell = sheet.getRange(i + 1, j + 1);
          cell.copyTo(cell, {contentsOnly: true}); // Removing formulas from the cell
        }
      }
    }
  });

  // Move file to the destination folder.
  var file = DriveApp.getFileById(destination.getId());
  DriveApp.getFolderById(destFolderId).addFile(file);
  file.getParents().next().removeFile(file);
  file.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.EDIT)
  var datevalue = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange(2, 4).getValue()
  var newdate = Utilities.formatDate(datevalue, "GMT", 'MM-dd-yyyy')
  file.setName("LPU Daily" + " " + newdate )
}

Проблема в том, что все ячейки, значения которых я хочу "скрепить" с электронной таблицей, используют Importrange функция в них, и если я не установлю источник, на который importrange ссылается на Publi c (совместное использование), сценарий не будет работать, и все значения ячеек соответственно будут возвращаться с нулем при копировании. Можно ли как-нибудь заставить этот скрипт работать, сохраняя конфиденциальность исходной таблицы для формул importrange?

...