Я пытаюсь написать скрипт, который позволит мне очистить ячейки, содержащие слово «вариант». Я нашел сценарии для удаления строк и попытался изменить их, чтобы вместо этого очистить ячейку, но мне это не удалось. У меня есть лист, который не содержит данных, которые можно идентифицировать, и я могу поделиться им с кем-то, кто готов помочь.
Рабочая тетрадь содержит два листа, и я использую один для «Вставки / удаления» данных, а второй - для «Распечатки» информации, отформатированной так, как я предпочитаю.
Проблема с удалением строк заключается в том, что она удаляет формулу, а затем портит данные для любого последующего использования, которое у меня есть.
Проблема, с которой я сталкиваюсь, заключается в том, что при загрузке списка выбора из программного обеспечения, которое я использую, он разделяет элемент и размер элемента (вариант) на отдельную строку (строку). Итак, я вставляю все данные на страницу вставки / удаления, а затем переключаюсь на страницу печати. На странице печати я пытаюсь очистить каждую ячейку, в которой есть слово «Вариант» в столбце B. У меня будет слово вариант в столбце C, поэтому я не могу очистить ячейки, которые содержат вариант в целом.
Код пункта меню для удаления строк
function onOpen(){
SpreadsheetApp.getUi()
.createMenu('My Menu')
.addItem('delete Data', 'deleteFunction')
.addToUi();
}
Код, который фактически удаляет
function deleteFunction(){
//declarations
var sheetName = "Pick List Creator Editable";
var ss = SpreadsheetApp.getActive();
var sheet = ss.getSheetByName('Print');
var dataRange = sheet.getDataRange();
var numRows = dataRange.getNumRows();
var values = dataRange.getValues();
var delete_string = getUIstring();//open initial UI, save value
if (delete_string.length < 3) return shortStringError()//UI to protect your document from an accidental entry of a very short string.
//removing the rows (start with i=2, so don't delete header row.)
var rowsdeleted = 0;
for (var i = 2; i <= numRows; i++){
var rowValues = values[i-1].toString();//your sheet has various data types, script can be improved here to allow deleting dates, ect.
if (rowValues.indexOf(delete_string) > -1){
sheet.deleteRow(i - rowsdeleted);//keeps loop and sheet in sync
rowsdeleted++;
}
}
postUIconfirm(rowsdeleted);//Open confirmation UI
}
Код для остановки удаления слишком коротких элементов
function getUIstring(){
var ui = SpreadsheetApp.getUi();
var response = ui.prompt("Enter the target data element for deletion")
return response.getResponseText()
}
function postUIconfirm(rowsdeleted){
var ui = SpreadsheetApp.getUi();
ui.alert("Operation complete. There were "+rowsdeleted+" rows deleted.")
}
function shortStringError(){
var ui = SpreadsheetApp.getUi();
ui.alert("The string is too short. Enter a longer string to prevent unexpected
deletion")
}
примечание редактора : этот код опубликован в комментарии автора вопроса. Он неполный, так как весь код не помещается в одном комментарии, а запрашивающий еще не предоставил более подробную информацию