Таблица макросов Google «Изменение действия макросов»

#google-apps-script #google-sheets #google-sheets-api

#google-приложения-скрипт #google-листы #google-таблицы-api

Вопрос:

Мне нужно было бы изменить то, как работает этот макрос

 function getDynamicRow(){   var ss = SpreadsheetApp.getActiveSpreadsheet();  var sheet = ss.getSheetByName('B.Wioski');  var sourceRange = sheet.getRange('A1:F26500');  var data = sourceRange.getValues(); // Array of arrays [[Row1],[Row1],[Row3]]   // add data to next empty row in the static sheet.   var targetSheet = ss.getSheetByName('TW');  targetSheet.getRange(targetSheet.getLastRow()   1, 1, data.length, data[0].length).setValues(data); } 

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

иллюстративное фото

кроме того, мне понадобится макрос для удаления данных старше 5-7 дней

Комментарии:

1. Пожалуйста, предоставьте данные в вашем примере в виде таблицы, чтобы мы могли скопировать и вставить их. Решение, которое вам требуется, довольно простое, за исключением удаления данных старше 5 дней, поскольку в данных нет временных меток. Где вы хотите разместить метки времени.

2. Я думал вставить функцию =IF(J2lt;gt;»»;ЕСЛИ(J1=»»;СЕГОДНЯ();J1);»»)

3. было бы лучше, если бы эта дата была первой строкой

Ответ №1:

Предложение

Возможно, вы можете попробовать эту реализацию ниже:

Скрипт:

 function getDynamicRow(){  var ss = SpreadsheetApp.getActiveSpreadsheet();  var sheet = ss.getSheetByName('B.Wioski');  var sourceRange = sheet.getRange('A1:F' sheet.getLastRow());  var data = sourceRange.getValues(); // Array of arrays [[Row1],[Row1],[Row3]]  data.push(["","","","","",new Date()]); //added a timestamp for reference on deleting older data   // add data to next empty row in the static sheet.   var targetSheet = ss.getSheetByName('TW');  var currentCol = targetSheet.getDataRange().getNumColumns();  if(currentCol != 1)currentCol = currentCol 1;  targetSheet.getRange(1, currentCol, data.length, data[0].length).setValues(data); }  

Примерный Результат:

После запуска сценария один раз:

введите описание изображения здесь

После повторного запуска (так далее и так далее) :

введите описание изображения здесь

Что касается удаления данных старше 5-7 дней, вот моя реализация, которую вы можете попробовать:

Поскольку я добавил метку времени на все скопированные данные на листе TW , вы можете обратиться к этому образцу сценария ниже:

обновленный

Скрипт:

 function deleteOlderThan5To7Days(){  var ss = SpreadsheetApp.getActiveSpreadsheet();  var targetSheet = ss.getSheetByName('TW');  var row = targetSheet.getDataRange().getLastRow();  var col = targetSheet.getDataRange().getLastColumn();  var data = targetSheet.getRange(row,1,1,col).getValues();   for(x=0; xlt; data[0].length; x  ){  var curCol = x   1;  if(data[0][x] != ""){  var getDate = Utilities.formatDate(new Date(data[0][x]), SpreadsheetApp.getActive().getSpreadsheetTimeZone(), "dd");  var checkDays = getDate - new Date().getDate();  if(new Date(data[0][x]).getMonth() 1 == new Date().getMonth() 1){ //If data timestamp is within the current month  if(checkDays gt; 5){ //Check if the timestamp of the data is more than 5 - 7 days  Logger.log("Current row date: " data[0][x] "n" "Found on column #" curCol  " is " checkDays " days older");  Logger.log("Delete data column "   curCol);  targetSheet.insertColumnsAfter(targetSheet.getLastColumn(),1); //add a blank column on every deletion  targetSheet.deleteColumn(curCol); //delete the points column data  return;  }else{  //Data timestamp is NOT older than 5-7 days");  }  }else{ //Data was copied last month or older that the current month  Logger.log("Current row date: " data[0][x] "n" "Found on column #" curCol  " is old");  Logger.log("Delete data column "  curCol);  targetSheet.insertColumnsAfter(targetSheet.getLastColumn(),1); //add a blank column on every deletion  targetSheet.deleteColumn(curCol); //delete the points column data  return;  }  }  } }  

Демонстрация образца:

Допустим, первые данные были скопированы 2 ноября 2021 года или 11/2/2021 , как показано здесь, на листе образцов на TW :

введите описание изображения здесь

После запуска примера функции deleteOlderThan5To7Days , вот результат:

введите описание изображения здесь

Журналы выполнения для просмотра:

введите описание изображения здесь

записка:

Тот же процесс удаления применяется, если когда-либо месяц совпадает с текущим месяцем, но старше 5-7 дней.

Комментарии:

1. спасибо, это отличный код

2. я изменил его для своих нужд, но мне нужна помощь, теперь нужно, чтобы первые 5 столбцов были несъемными из столбца F, который нужно удалить. Можете ли вы переписать код, чтобы удалить только столбцы даты?

3. Спасибо за ваш ответ. Что касается первых 5 столбцов, которые вы должны быть несъемными, мне это совершенно непонятно. Просто для уточнения, вы имеете в виду, что хотите удалить только столбец Points с датой метки времени старше 5-7 дней, верно?

4. Да, меня интересует только колонка Баллов. Столбцы LP, название деревни, позиция X, позиция Y и идентификатор игрока не являются переменными

5. Я обновил свой скрипт для deleteOlderThan5To7Days своего ответа, чтобы удалить только Points столбец с датой метки времени старше 5-7 дней