Если ячейки столбца A объединяются, точные ячейки должны быть объединены в столбце E - PullRequest
1 голос
/ 20 июня 2020

Моя ведомость состоит из данных о режиме работы бригады посменно. В столбце А указан серийный номер. В столбце E указано общее количество рабочих часов. Однодневное дежурство состоит из небольших смен, и некоторые детали, такие как S.No, имя, идентификатор экипажа, повторяются.

Исходные данные

Я хочу объединить столбец с той же ячейкой значения (столбцы A и E). Мне удалось объединить столбец A из S.No (спасибо @Tanaike с этого форума) и хочу сделать то же самое для столбца E.

На данный момент выполнено

Что я хочу

Условие - Если столбец A объединен, ровно ни одна из ячеек не должна объединиться в столбце E. Итак, если объединены A11, A12 = E11, E12 должны сливаться; A13 не объединен = E13 не объединен; A14, A15, A16, A17 объединены = E14, E15, E16, E17 должны объединиться. Спасибо.

Соответствующий код на данный момент -

   // merge columns vertically for same cell value for Column A
  var start = 10; //data starts from row 10
  var c = {};
  var k = "";
  var offset = 0;

  // Retrieve values of column A
  var data = destSheet.getRange(start, 1, lastRow-2, 1).getValues().filter(String);

  // Retrieve the number of duplication values.
  data.forEach(function(e){c[e[0]] = c[e[0]] ? c[e[0]] + 1 : 1;});

  // Merge cells.
  data.forEach(function(e){
    if (k != e[0]) {
      destSheet.getRange(start + offset, 1, c[e[0]], 1).merge();
      offset += c[e[0]];
    }
    k = e[0];
  });  
    
 

1 Ответ

1 голос
/ 22 июня 2020

Два подхода к решению вашей проблемы

  1. Скрипт приложений предлагает такие методы, как isPartOfMerge () и mergeVertical () , которые позволят вам перенести слияние форматирование из столбца A в столбец E.
  • Это можно сделать, перебрав все объединенные диапазоны в столбце A, извлекая их начальную и конечную строки и объединяя соответствующие диапазоны в столбце E:
var range = destSheet.getRange(1,1, destSheet.getLastRow(), 1);
  var mergedRanges = range.getMergedRanges();
  for (var i = 0; i < mergedRanges.length; i++) {
    Logger.log(mergedRanges[i].getA1Notation());
    var start = mergedRanges[i].getRow();
    var end = mergedRanges[i].getLastRow();
    var destinationRange =  destSheet.getRange(start, 5, end - start + 1, 1);
    destinationRange.mergeVertically();
  }
Вы можете скопировать форматирование из всего столбца A в столбец E - это скопирует слияние
var range = destSheet.getRange(1,1, destSheet.getLastRow(), 1);
  var destinationRange = destSheet.getRange("E1");
  range.copyTo(destinationRange, SpreadsheetApp.CopyPasteType.PASTE_FORMAT, false);
...