Подтвердить что ты не робот

Заполнить - Google Apps Script для электронных таблиц

Есть ли функция, которая может заполнять данные для всех пустых ячеек из строки выше?

Если нет, может ли кто-нибудь помочь мне с помощью Google Apps Script (или другого решения), который может проходить через каждую строку в моей электронной таблице google, проверять наличие пустых ячеек и, если он найден, заполнить их данными из строка выше?

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

Спасибо!

4b9b3361

Ответ 1

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

Я попытаюсь описать нативную функциональность в GSheets, относящуюся к этому.

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

  2. Вы можете выбрать исходную ячейку и ячейки под ней (см. Пункт 4), а затем нажать Ctrl + Enter, чтобы заполнить. Вы также можете использовать Ctrl + Enter или Ctrl + R для заполнения вправо.

  3. Вы можете выбрать исходную ячейку, нажмите Ctrl + C для копирования, затем выберите ячейки выше (или слева - и снова обратитесь к пункту 4), а затем нажмите Ctrl + V для вставки. Это имеет эффект заполнения (или слева).

  4. Вы можете быстро выбрать пустые ячейки под (или над, или справа, или слева от) исходной ячейки, нажав Ctrl + Shift + Down (или вверх, или вправо, или влево). Это приведет вас к пределу листа или следующей заполненной ячейке. Если последнее, вы можете затем нажать Shift + Up (или Вниз, или Влево, или Вправо), чтобы вернуться к последней пустой ячейке. И затем заполните как требуется согласно пунктам 2 и 3.

  5. Вам нужно будет сделать это для каждой несмежной группы пустых ячеек. Если вы хотите иметь возможность быстро автоматически заполнять несмежные группы пустых ячеек, тогда да, потребуется скрипт.

Ответ 2

Используйте copyTo. Я в основном адаптирую ответ, который я нашел об этом здесь:

  var sheet = SpreadsheetApp.getActiveSheet();
  var originRange = sheet.getRange("A1:B1");
  var target = sheet.getRange("A2:B");
  originRange.copyTo(target);

Это будет автоматически заполнять/расширять формулы в originRange ко всему ниже, как при копировании и вставке.

Ответ 3

var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Name");
var formulas = sheet.getRange(10, 1, 1, 10).getFormulasR1C1();
var newRange = sheet.getRange(11, 1, 1, 10);
newRange.setFormulasR1C1(formulas);

Используя getFormulasR1C1(), а затем setFormulasR1C1 (формулы) Эта функция имитирует перетаскивание мышью формулы

Обратите внимание, что если ячейка не содержит формулу, она будет показывать ошибку. Вам придется обойти эту проблему, опустошив ячейки.

Ответ 4

Здесь работает script, который добавляет пользовательское меню в ваш Лист Google. Загрузите script для Листа Google, выберите диапазон на листе и выберите "Заполнить пустые ячейки" в пользовательском меню. Пустые ячейки будут заполнены значением ячейки выше.

function onOpen() {
  var ui = SpreadsheetApp.getUi();
  // Or DocumentApp or FormApp.
  ui.createMenu('Custom Menu')
      .addItem('Fill Blank Cells', 'menuItem1')
      .addToUi();
}

function menuItem1() {
  fillBlankWithAbove()
}

//Iterates over the range from top to bottom
//and left to right, and fills blank cells 
//with the value right above them.
function fillBlankWithAbove() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var range = sheet.getActiveRange();
  Logger.log('Range height is: ' + range.getHeight());
  var values = range.getValues();

  var width = values[0].length;
  var height = values.length;
  Logger.log('Width is ' + width);
  Logger.log('Height is ' + height);

  for (var i = 0; i < width; i++) {
    var lastVal = '';
    for(var j = 0; j < height; j++) {   
      var currValue = values[j][i];

      var dataType = typeof(currValue);
      //Empty string check returns true if dataType
      //is a number, and value is zero.  In that case
      //we don't want to overwrite the zero, so only
      //check emptyString for string types.
      if(currValue === undefined || 
         (dataType === 'string' && currValue == '')
        )  {
        //getCell parameters are relative to the current range
        //and ones based
         var cell = range.getCell(j+1, i+1);
         cell.setValue(lastVal);

      }
      else {
        lastVal = currValue;
      }
    }
  }
  SpreadsheetApp.flush();
}