Перенос данных в первую доступную ячейку (не строку) в столбце - PullRequest
0 голосов
/ 15 мая 2019

У меня есть лист для мониторинга инвентаря. У меня есть скрипт на листе, чтобы скопировать значения строк с данными и вставить в первую доступную строку на другом листе, а затем очистить содержимое. Это оставляет дыры в моих данных на оригинальном листе. Я хочу объединить все мои данные до первых доступных ячеек в столбце, чтобы между строками с данными никогда не было пустых строк. К сожалению, я не могу сделать то же самое, что я делаю с другим листом, так как в моей строке есть определенные столбцы, у которых есть формулы, которые должны остаться (суммировать формулы для расчета веса и т. Д.). Если я возьму всю строку, это испортит мои формулы или формулы испортят сценарий (строка недоступна, поскольку содержит значение). Итак, в основном то, что у меня есть это:

Sheet1 name = 'CURRENT MONTH' 
Sheet2 name = 'SHIPPED INVENTORY'

Общий диапазон с данными на Листе 1 = A11:W61 Диапазоны с данными, которые необходимо сдвинуть вверх = A11:O61, R11:S61, V11:W61 Диапазоны с формулами, которые не могут сдвигаться = P11:Q61, T11:U61

Я искал то, что мог, но либо не могу правильно сформулировать свою дилемму, либо ответы превышают мой уровень квалификации, и я не могу заставить их работать на меня. Любая помощь с благодарностью!

1 Ответ

0 голосов
/ 16 мая 2019

Не видя, как вы перемещаете информацию с одного листа на другой, этот код копирует всю строку в первый ряд инвентарного листа:

function myFunction ()
{
  ...

  var ss = SpreadsheetApp.getActiveSpreadsheet ();
  var month_sheet = ss.getSheetByName ("CURRENT MONTH");
  var shipped_sheet = ss.getSheetByName ("SHIPPED INVENTORY");

  var month_values = month_sheet.getDataRange ().getValues ();
  for (var i = 11; i < month_values.length && i <= 61; i++)
  {
    if (test_value) // This is a row you want to move to the other sheet
    {

      // Create a row in the SHIPPED INVENTORY sheet,
      // and copy the full row into it
      shipped_sheet.insertRowAfter (1); // Assuming a header row
      var shipped_row_1= shipped_sheet.getRange (2, 1); // Get second row in file
      var month_range = month_sheet.getRange ((i + 1), 1, 1, month_sheet.getMaxColumns ());
      month_range.copyTo (shipped_row_1);

      // Now move everything else up
      moveRangeUp (month_sheet, "A", i, "O61");
      moveRangeUp (month_sheet, "R", i, "S61");
      moveRangeUp (month_sheet, "V", i, "W61");
      i--; // Since everything moved up, check this row's new information
    }
  }

  ...          
}

function moveRangeUp (sheet, first_col, row, last_col_row)
{
  var from_a1Notation = first_col + (i + 1) + ":" + last_col_row;
  var to_a1Notation = first_col + (i);
  var copy_range = sheet.getRange (from_a1Notation);
  var to_range = sheet.getRange (to_a1Notation);
  copy_range.copyTo (to_range);

  // After shift up, delete last row of data, since it is also moved up
  // Always assuming that the last row is row 61
  var delete_a1Notation (first_col + "61:" + last_col_row);
  var delete_range = sheet.getRange (delete_a1Notation);
  var delete_range.clear ();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...