Из-за отсутствия функциональности в Документах Google для контрольных списков я пишу скрипт кода для автоматического расчета процента заполнения списка на основе символа, присутствующего в каждом элементе списка, принадлежащем списку. Для этого я извлекаю все элементы списка, относящиеся к listID, а затем пытаюсь проверить их атрибут GLYPH_TYPE, чтобы определить, какие элементы были выполнены (что пользователь указывает, щелкнув символ слева от элемента списка и изменив его). до галочки). Проблема заключается в том, что при попытке получить все элементы списка, принадлежащие данному listID, идентификатор отличается при изменении символа перед элементом списка (другими словами, атрибут GLYPH_TYPE отличается).
Несмотря на то, что список согласован с пользователем (список выглядит просто как контрольный список, в котором некоторые элементы заполнены, а другие нет), я не могу просто идентифицировать список в коде с помощью метода getListID() из-за встроенной функции Google, которая автоматически идентифицирует другой список, когда атрибут GLYPH_TYPE отличается от других элементов списка.
Ниже приведен метод, который я использую, чтобы попытаться получить все элементы списка, принадлежащие определенному идентификатору списка, а затем вернуть соответствующие элементы списка в массиве для статистического анализа:
function getAllListItemsInList(listID,documentID){
var doc = DocumentApp.openById(documentID);
var body = doc.getBody();
var listItems = body.getListItems();
var listItemsWithID = [];
for(var i = 0; i< listItems.length; i++){
Logger.log(listItems[i].getListId());
if (listItems[i].getListId() == listID){
listItemsWithID.push(listItems[i]);
}
}
return listItemsWithID;
}
Если вы запустите этот метод для согласованного списка из 5 элементов списка, в одном из которых есть галочка в качестве типа глифа вместо маркера, в журнал записывается и возвращается следующее;
Следующее регистрируется и возвращается;
[19-01-22 15:44:04:885 MST] kix.jbwvso8omgk3
[19-01-22 15:44:04:886 MST] kix.jbwvso8omgk3
[19-01-22 15:44:04:886 MST] kix.mvpj0m62r3h8
[19-01-22 15:44:04:887 MST] kix.jbwvso8omgk3
[19-01-22 15:44:04:888 MST] kix.jbwvso8omgk3
[19-01-22 15:44:04:888 MST] [ListItem, ListItem, ListItem, ListItem]
Как видите, вместо 5 возвращаются только 4 элемента. 4 из 5 listItems имеют одинаковый listID, а тот, у которого другой тип глифа, — нет.
Есть ли интуитивно понятный обходной путь? Или, возможно, более интуитивно понятный способ отслеживать заполнение «контрольных списков» в Документах Google?
Например, в качестве обходного пути, как насчет сравнения документа с модификацией и без нее? Из the list being coherent to the user
считается, что длина getListItems()
одинакова до и после модификации. Я думаю, что это можно использовать для достижения желаемого результата. И я думаю, что цель может быть достигнута путем сравнения идентификаторов списков. Если я неправильно понимаю вашу ситуацию, прошу прощения.
Это разумное решение для расчета процента заполнения списка; однако, чтобы даже сгруппировать список, мне нужно сначала идентифицировать его в коде. После этого я могу использовать атрибут GLYPH_TYPE для расчета процента выполнения. Ваше решение будет работать, если мне придется написать функцию, которая идентифицирует связный список в коде без использования ненадежных listID, но я пытаюсь избежать этого, так как это было бы излишне сложно.
@Jaden Ranzenberger Прошу прощения, что мой комментарий не был полезен в вашей ситуации. Кстати, я не могу понять, что вы хотите насчет I need to identify it in the code first.
. Могу я спросить вас о деталях этого?
Конечно; Итак, по сути, я пытаюсь получить все элементы списка, принадлежащие списку в коде, в виде массива. Это можно сделать с помощью функции getListItems(), функции DocumentApp, а затем сгруппировать все элементы списка, которые имеют одинаковый listID, в массив. Это то, что пытается сделать моя функция getAllListItemsInList() в исходном посте. Единственная проблема заключается в том, что даже несмотря на то, что список явно согласован при просмотре его в документе Google, изменение глифа перед listItem с маркера на другой глиф изменяет идентификатор списка этого элемента списка, делая мой метод бесполезным.
Поэтому мне нужно найти надежный способ получить все элементы списка, которые принадлежат списку в массиве в коде. Вот что я имел в виду под этим заявлением. @Танаике
@Jaden Ranzenberger Спасибо за подробную информацию. Из вашего ответа я подумал, что индекс массива, в котором есть элементы списка, может быть использован для вашей ситуации. Индекс одинаков до и после редактирования пользователем. Становится ли это обходным путем?
Вы пробовали другой метод Javascript, например
.map()
или.fill()
?