ИГРОКИ, ЧТОБЫ СКАЗАТЬ, я очень новичок в этом, но изо всех сил пытаюсь понять все это.У меня сейчас есть скрипт, который активно удаляет все пустые строки из всей книги.Но я надеюсь, что кто-то может помочь, сузив это до одного листа в этой книге.
function removeEmptyRows() {
SpreadsheetApp.getActive()
.getSheets()
.forEach(function (s) {
c = 0;
s.getRange(1, 1, s.getMaxRows(), s.getMaxColumns())
.getValues()
.forEach(function (r, j) {
if (r.toString()
.replace(/,/g, "")
.length == 0) {
s.deleteRow((j += 1) - c)
c += 1;
}
})
})
}
В идеале я хотел бы для этого удалить только пустые строки на одном листе в моей книге под названием «Результаты гонок».».Причина, по которой я нуждаюсь в этом, заключается в том, как электронная таблица настроена и несколько строк объединены вместе.Поэтому, когда я копирую эти результаты на другой лист, между ними возникают пробелы, и я бы хотел, чтобы они были удалены.Вот сценарий, который я использую, чтобы скопировать данные на другой лист.
function Copy() {
var sss = SpreadsheetApp.openById('18cl69Id4saI455wk__-PhvfxXZa7iWlQpoiRKqBz6bU');
var ss = sss.getSheetByName('Score Card');
var range = ss.getRange('A32:E36');
var data = range.getValues();
var tss = SpreadsheetApp.openById('18cl69Id4saI455wk__-PhvfxXZa7iWlQpoiRKqBz6bU');
var ts = tss.getSheetByName('Race Results');
ts.getRange(ts.getLastRow()+1, 1, data.length, data[0].length).setValues(data);
}
Если не бросить один последний гаечный ключ в этот колоссальный беспорядок, я пытаюсь скопировать два разных диапазона ячеек в пределахтот же сценарий, и я чувствую, что это невозможно, потому что копируется только последний, а исходный отбрасывается.Вот другой сценарий копирования, который я использую, который запускается перед тем, что выше этого.
function Copy() {
var sss = SpreadsheetApp.openById('18cl69Id4saI455wk__-PhvfxXZa7iWlQpoiRKqBz6bU');
var ss = sss.getSheetByName('Score Card');
var range = ss.getRange('A1:A1');
var data = range.getValues();
var tss = SpreadsheetApp.openById('18cl69Id4saI455wk__-PhvfxXZa7iWlQpoiRKqBz6bU');
var ts = tss.getSheetByName('Race Results');
ts.getRange(ts.getLastRow()+1, 1, data.length, data[0].length).setValues(data);
}
Снимок экрана карты показателей
В идеальном мире япопытка получить настройки заключается в следующем.Выше приведен скриншот используемой нами системы показателей.Я хочу скопировать текущую дату (А1) на лист «Результаты гонок», а затем скопировать окончательный счет с именами команд (А32: Е36) и переместить их на лист «Результаты гонок» прямо под ним.Как только это будет сделано, я хочу удалить пустые строки между результатами, потому что на данный момент это выглядит так, как при копировании.(см. изображение ниже)
Снимок экрана результатов гонки
Заранее спасибо всем, кто может помочь с любым из этого в любой форме или форме.
Редактировать: удаление пустых строк из электронной таблицы работает как задумано.По-прежнему возникают проблемы с копированием несколько раз в одном действии, даже если им присвоены разные имена.Вот мой обновленный скрипт.
function CopyDate() {
var sss = SpreadsheetApp.openById('18cl69Id4saI455wk__-PhvfxXZa7iWlQpoiRKqBz6bU');
var ss = sss.getSheetByName('Score Card');
var range = ss.getRange('A1:A1');//This range is only one cell
var data = range.getValues();
var tss = SpreadsheetApp.openById('18cl69Id4saI455wk__-PhvfxXZa7iWlQpoiRKqBz6bU');
var ts = tss.getSheetByName('Race Results');
ts.getRange(ts.getLastRow()+1, 1, data.length, data[0].length).setValues(data);
}
function CopyScore() {
var sss = SpreadsheetApp.openById('18cl69Id4saI455wk__-PhvfxXZa7iWlQpoiRKqBz6bU');
var ss = sss.getSheetByName('Score Card');
var range = ss.getRange('A32:E36');
var data = range.getValues();
var tss = SpreadsheetApp.openById('18cl69Id4saI455wk__-PhvfxXZa7iWlQpoiRKqBz6bU');
var ts = tss.getSheetByName('Race Results');
ts.getRange(ts.getLastRow()+1, 1, data.length, data[0].length).setValues(data);
}
function delBlankRows(shtname){
var shtname=shtname || 'Race Results';
var ss=SpreadsheetApp.getActive();
var sh=ss.getSheetByName(shtname);
var rg=sh.getRange(1,1,sh.getMaxRows(),sh.getLastColumn());
var vA=rg.getValues();
var n=0;
for(var i=0;i<vA.length;i++){
if(!vA[i].join("")){
sh.deleteRow(i-n+1);
n++;
}
}
}
function Sleep(milliseconds) {
var start = new Date().getTime();
for (var i = 0; i < 1e7; i++) {
if ((new Date().getTime() - start) > milliseconds){
break;
}
}
}
function SaveRaceResults() {
CopyDate();
Sleep(5000);
CopyScore();
Sleep(5000);
delBlankRows();
}