Я настраиваю боковую панель в Google Sheets для отображения информации из строк, чтобы моя команда лучше видела определенные данные. Благодаря нескольким ответам Mogsdad (огромные реквизиты) я смог настроить боковую панель HTML и функции отображения, которые обновляют DOM с помощью информации из любой выбранной строки. Я пытаюсь расширить это, запустив пользовательский поиск по определенной ячейке (строке) в диапазоне строк и добавив элемент в DOM, который отображает первые 5 результатов поиска Google; Тем не менее, мне трудно указывать на строковое значение в этой конкретной ячейке (на самом деле это столбец в массиве), запускать его в своей пользовательской функции поиска и получать функцию, которая добавляет элементы в HTML для добавления результатов.
Вдохновение для этого варианта использования взято из Демонстрация Гранта Тиммермана Apps Script на Angular Connect 2018 , где он обновляет боковую панель информацией о спикерах событий и извлекает видео с Youtube, используя строку поиска из определенной ячейки , В приведенном ниже коде вы увидите, что я многое почерпнул из метода опроса листов Mogsdad и их пошагового руководства по настройке пользовательской поисковой системы с использованием протокола API Key Google.
Вот мои настройки .gs:
/**
*This function creates the sidebar in Sheets' UI based on HTML I set up *separately.
*/
function checkUpdates() {
var ui = HtmlService.createTemplateFromFile('CheckSidebar')
.evaluate()
.setSandboxMode(HtmlService.SandboxMode.IFRAME)
.setTitle('Recent Sheet Updates');
SpreadsheetApp.getUi().showSidebar(ui);
};
/**
* Returns the active row.
* All based on Mogsdad's sheet polling function from 2015.
*/
function getRecord() {
var sheet = SpreadsheetApp.getActiveSheet();
var data = sheet.getDataRange().getValues();
var headers = data[0];
var rowNum = sheet.getActiveCell().getRow();
if (rowNum > data.length) return [];
var record = [];
for (var col=0;col<headers.length;col++) {
var cellval = data[rowNum-1][col];
// Here I tried to set another variable to data[rowNum-1][2] to get some //specific data from column #3
Logger.log(cellval);
record.push({ heading: headers[col],cellval: cellval });
}
return record;
}
В отдельной вкладке редактора у меня настроена функция поиска, также в значительной степени просто следуя инструкциям Mogsdad:
function SearchFetch(query) {
var urlTemplate = "https://www.googleapis.com/customsearch/v1?key=%KEY%&cx=%CX%&q=%Q%";
var ApiKey = "custom API Key";
var searchEngineID = "ID for the search engine";
var url = urlTemplate
.replace("%KEY%", encodeURIComponent(ApiKey))
.replace("%CX%", encodeURIComponent(searchEngineID))
.replace("%Q%", encodeURIComponent(query));
var params = {
muteExceptions: true
};
Logger.log(UrlFetchApp.getRequest(url, params));
var response = UrlFetchApp.fetch(url, params);
var respCode = response.getResponseCode();
if (respCode !== 200) {
throw new Error ("Error " +respCode+ " " + response.getContentText());
}
else {
var result = JSON.parse(response.getContentText());
Logger.log("Obtained %s search results in %s seconds.",
result.searchInformation.formattedTotalResults,
result.searchInformation.formattedSearchTime);
return result;
Наконец, у меня есть функция между тегами в HTML, которая захватывает значения из массива, сгенерированного getRecord (), и выгружает их в элемент DOM с идентификатором класса "floatypar" (естественно, для абзацев, выглядящих как плавающие). Здесь много разметки Могсдада:
function showRecord(record) {
if (record.length) {
for (var i = 0; i < record.length; i++) {
// build field name on the fly, formatted field-1234
var str = '' + i;
var fieldId = 'field-' + ('0000' + str).substring(str.length)
// If this field # doesn't already exist on the page, create it
if (!$('#'+fieldId).length) {
var newField = $($.parseHTML('<div id="'+fieldId+'"></div>'));
$('.floatypar').append(newField);
}
// Replace content of the field div with new record
$('#'+fieldId).replaceWith('<div id="'+fieldId+'" class="floatypar">' +record[i].cellval + '</div>');
}
}
//Setup the next poll
poll();
}
Когда я запускаю это, боковая панель отображает значения из каждой ячейки в строке в своем собственном div на боковой панели. Однако я не могу передать значения из столбца № 3 поисковой системе и отобразить результаты в их собственной панели div. Кто-нибудь может направить меня в правильном направлении? Пожалуйста, дайте реквизит Могсдаду в любом случае!