Разверните одну строку на несколько строк, если в следующем столбце есть содержимое в электронной таблице - PullRequest
0 голосов
/ 28 мая 2020

У меня есть древовидная структура, определенная в электронной таблице Google. Мне нужно изменить следующую структуру:

+---+------------+-----------------+--------------------+-----+--------------+
|   |     A      |        B        |         C          |  D  |      E       |
+---+------------+-----------------+--------------------+-----+--------------+
| 1 | Techniques | Adduction d'eau | Conduites en fonte | Eau | Tuyaux       |
| 2 |            |                 |                    |     | Robinetterie |
| 3 |            |                 |                    |     | Outils       |
| 4 |            |                 |                    |     | Accessoires  |
| 5 |            |                 |                    | Gaz | Tuyaux       |
| 6 |            |                 |                    |     | Robinetterie |
| 7 |            |                 |                    |     | Outils       |
| 8 |            |                 |                    |     | Accessoires  |
+---+------------+-----------------+--------------------+-----+--------------+

на это:

+----+------------+-----------------+---------------------+-----+--------------+
|    |     A      |        B        |          C          |  D  |      E       |
+----+------------+-----------------+---------------------+-----+--------------+
|  1 | Techniques |                 |                     |     |              |
|  2 |            | Adduction d'eau |                     |     |              |
|  3 |            |                 | Conduites en fonte  |     |              |
|  4 |            |                 |                     | Eau |              |
|  5 |            |                 |                     |     | Tuyaux       |
|  6 |            |                 |                     |     | Robinetterie |
|  7 |            |                 |                     |     | Outils       |
|  8 |            |                 |                     |     | Accessoires  |
|  9 |            |                 |                     | Gaz |              |
| 10 |            |                 |                     |     | Tuyaux       |
| 11 |            |                 |                     |     | Robinetterie |
| 12 |            |                 |                     |     | Outils       |
| 13 |            |                 |                     |     | Accessoires  |
+----+------------+-----------------+---------------------+-----+--------------+

Есть идеи, как действовать? Заранее спасибо

1 Ответ

0 голосов
/ 29 мая 2020

Вот мое решение. Наверное, не идеально, но работает.

var ss = SpreadsheetApp.getActiveSpreadsheet();

function onOpen() {
  var menu = [{name:"Split in rows", functionName:"splitInRows"}];
  ss.addMenu("Extras", menu);
}


function splitInRows() {

  // Get the current sheet, row, and column.
  var sheet = ss.getActiveSheet();
  var lastRow = sheet.getLastRow();
  var lastColumn = sheet.getLastColumn();

  var range = sheet.getRange(1, 1, lastRow, lastColumn);
  var numRows = range.getNumRows();
  var numCols = range.getNumColumns();

  for (var i = numRows; i > 0; i--) {    
    for (var j = numCols; j > 0; j--) {

      var cell = range.getCell(i,j);
      var cellValue = cell.getDisplayValue();

      if ( j > 1 && cellValue ) {

        // check if previous cell has content
        var previousCellValue = range.getCell(i,j-1).getDisplayValue();

        if (previousCellValue){

          // create empty row
          sheet.insertRowsAfter(i, 1);

          // move cell value into cell just below
          var currentCell = sheet.getRange(i, j);
          var belowCell = sheet.getRange(i+1, j);

          currentCell.copyTo(belowCell, {contentsOnly:true});
          currentCell.clearContent();

        }
      }
    }
  }
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...