Вот мое решение. Наверное, не идеально, но работает.
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();
}
}
}
}
}