Как исправить код, чтобы удалить формулы, но оставить значения во всех листах APART из указанных - PullRequest
3 голосов
/ 22 октября 2019

Я хочу удалить формулы и вставить значения на всех листах, кроме Base Data и Template.

function myFunction() {
  var ss = SpreadsheetApp.getActive(); 
  var allsheets = ss.getSheets();
  for(var s in allsheets){
    var sheet = allsheets[s];
    if(
      (sheet.getSheetName() == "Base Data") || 
      (sheet.getSheetName() == "Template")  
    );
    function removeFormulas() {
      SpreadsheetApp.getActive().getSheets()
        .forEach(function (sh) {
          var r = sh.getDataRange()
          r.copyTo(r, {
            contentsOnly: true
          })
      })
    }
  }
}

Желаемым результатом будет оставить формулы в Base Data и Templateтолько для других вкладок, чтобы удалить их и сохранить значения.

1 Ответ

2 голосов
/ 22 октября 2019

Не проверено - но это может дать некоторое представление.

Основное отличие состоит в том, чтобы проверять имена листов, НЕ совпадающие с вашими перечисленными листами, тогда все остальные листы должны иметь копию, только содержимое.


function myFunction() {
  var ss = SpreadsheetApp.getActive(); 
  var allsheets = ss.getSheets();
  for(var s in allsheets){
    var sheet = allsheets[s];
    if(sheet.getSheetName() != "Base Data" || sheet.getSheetName() != "Template") {

            var thissheet = ss.getSheetbyName(sheet.getSheetName());
            var lR = thissheet.getLastRow();
            var LC = thissheet.getLastColumn();
            var range = thissheet.getRange(1,1,LR,LC);
            range.copyTo(range, {contentsOnly: true});

        }
    }
}

ОБНОВЛЕНИЕ: Следующий скрипт был протестирован и работает в соответствии с ожиданиями ОП. Листы «Базовые данные» и «Шаблон» исключены из метода copyTo.

Следует отметить несколько моментов:

  • Оператор if объединяет тест для«Базовые данные» и «Шаблон» с И вместо ИЛИ. Необходимая логика состоит в том, чтобы установить, что текущее имя листа не является ни одним из названных листов. И имеет эффект рассмотрения этого в целом;ИЛИ позволяет позволить одному или другому быть правдой, но не приводит к выполнению условия, при котором оба они являются истинными.
  • Я допустил ошибку, включив getSheetbyName(). В этом не было необходимости, поскольку цикл уже создал контекст для листа.

function so5850593801() {

  // setup spreadsheet
  var ss = SpreadsheetApp.getActiveSpreadsheet();

  // get all the sheets
  var allsheets = ss.getSheets();

  // loop through the sheets
  for(var s in allsheets){
    var sheet = allsheets[s];
    var sheetname = sheet.getSheetName();

    // don't process Base data or Template
    if(sheetname !== "Base Data" &&  sheetname !== "Template") {
      var LR = sheet.getLastRow();
      var LC = sheet.getLastColumn();
      var range = sheet.getRange(1,1,LR,LC);
      range.copyTo(range, {contentsOnly: true});
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...