Range.copyTo(DestinationRange, .PASTE_NORMAL, false) не удается скопировать

Я должен начать с извинений, если я не смог описать проблему, с которой я столкнулся, или контекст, в котором я наткнулся на нее. Если есть какая-либо другая информация, которая может помочь вам понять, что происходит, пожалуйста, дайте мне знать.

Контекст: у меня есть две таблицы в одной электронной таблице: "Контрольный список", который должен работать как форма, и "Редактировать контрольный список", который, как следует из названия, будет использоваться для редактирования формата первого. Идея состоит в том, что, как только пользователь закончит редактирование макроса, он заменит предыдущую форму, просто скопировав новую версию в старую.

Проблема: использование функции Range.copyTo() через скрипт не приведет к копированию всей новой формы, пропуская целый столбец и особенно формат и объединенные диапазоны. Пожалуйста, найдите ниже скриншоты

Код

/**
 *   Updates the checklist form after edditing.
 */
function update_checklist(){

  // First we clean whatever used to be the checklis
  del_checklist_sections();

  // Now we gather the new checklist into a range
  new_checklist = get_edit_checklist_form_range();

  // We now have to make room for the new list on the Checklist Sheet
  b_row = spreadsheet.getRangeByName("Checklist!"+NAMED_RANGES.form_start).getRow();
  f_form.insertRowsAfter(b_row, new_checklist.getNumRows());

  //new_checklist.copyFormatToRange(f_form, 1, new_checklist.getLastColumn(), b_row+1, b_row+1+new_checklist.getNumRows());

  new_checklist.copyTo(get_checklist_form_range(), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
  //new_checklist.copyTo(get_checklist_form_range(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);

}

/**
 *   Correctly grabs the sections and tasks range in the checklist sheet. 
 *
 * The correct range doesn't include the first and last rows of the named range. 
 *
 * @return {Range} the corresponding range.
 */
function get_checklist_form_range(){

  full_range = spreadsheet.getRangeByName("Checklist!"+NAMED_RANGES.full_form);
  if (full_range.getNumRows() > 2){

    // We are adding one so we won't consider the initial row in the range, and subtracting to so we won't consider the first and last.
    return f_form.getRange(full_range.getRow()+1, full_range.getColumn(), full_range.getNumRows() - 2);
  }else{
    return 0
  }

}

function get_edit_checklist_form_range(){

  full_range = spreadsheet.getRangeByName("Edit Checklist!"+NAMED_RANGES.full_form)
  // We are adding one so we won't consider the initial row in the range, and subtracting to so we won't consider the first and last.
  //  return f_form.getRange(full_range.getRow()+1, full_range.getColumn(), full_range.getNumRows() - 2)
  return e_form.getRange(full_range.getRow()+1, full_range.getColumn(), full_range.getNumRows() - 2);

}

Примечание. Пытаясь упростить поиск диапазонов, я использовал именованные диапазоны для указания частей листов.

Обновления:

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

0 ответов

Мне потребовалось некоторое время, чтобы вернуться к этому проекту, но здесь мы идем:

Проблема заключалась в том, как я приобретал ассортимент. Оказывается, я не выбирал все данные, которые хотел скопировать и вставить.

Другие вопросы по тегам