Получить строка/столбец "кликнутой" ячейки Гугл-таблицы
Скрипты только постигаю... работал исключительно в VBA...
Пытаюсь наваять "нечто" в Гугл-Таблице. Вопрос - в заголовке темы. Стырил на каком-то сайте код: document.querySelector('Prestige').onclick = (event) => { let cell = event.target; if (cell.tagName.toLowerCase() != 'td') return; let i = cell.parentNode.rowIndex; let j = cell.cellIndex; console.log(i, j); } }; В таблице вставил его в редактор скриптов... и ничего, хоть обкликайся:cray: А ,если запустить скрипт прямо в редакторе, то он пишет что "документ не определён и указывает на первую строку. 'Prestige' - имя Таблицы |
|
Прочёл ссылку... ешё раз прочёл... интуитивно догадываюсь, что чего-то не дописал? Понять бы только - что?
Если файл(Таблица) открыт на экране, то разве он уже не загружен и событие DOMContentLoaded не произошло? Зачем его специально обрабатывать? (Логика работы в VBA меня всё время сбивает.:-E ) |
Цитата:
PS. Кстати, querySelector(), это получение ссылки на объект по селектору, которым может быть значения: имя тега, атрибута id, или имя класса. То есть в вашем случае, если Prestige, это id, то document.querySelector('#Prestige') если имя класса, то document.querySelector('.Prestige') а у вас не понять что. Если ваш скрипт размещен, например, в конце страницы, то DOMContentLoaded и не обязателен, и причиной ошибки может быть как раз проблема с некорректным селектором (при этом об этом в ошибке будет сказано). Не заметил я сразу этот ляп, проверьте, что у вас и исправьте. |
Я пока не понимаю - где размещён мой скрипт? Есть Гугл-таблица, у неё есть Редактор скриптов, вот в нём и лежит скрипт. Интуичу, что все эти td,tr и т.п. мне не нужны, ведь сама страница(собственно таблица) уже сформирована?
Пробую переделать код. Вариант 1: function myFunc() { function ready(){ document.querySelector('Prestige').onclick = (event) => { let cell = event.target; if (cell.tagName.toLowerCase() != 'td') return; let i = cell.parentNode.rowIndex; let j = cell.cellIndex; console.log(i, j); }}}; Ошибка при запуске в Редакторе пропала, но и работать не стало. Вариант 2: function myFunc() { document.addEventListener("DOMContentLoaded", () => { document.querySelector('Prestige').onclick = (event) => { let cell = event.target; if (cell.tagName.toLowerCase() != 'td') return; let i = cell.parentNode.rowIndex; let j = cell.cellIndex; console.log(i, j); }})}; И опять возникает "документ не определён" во второй строке Prestige - имя таблицы, пробовал и '#Prestige', и '.Prestige' в Варианте 1 - без толку. |
Цитата:
|
Google Таблицы, по умолчанию создаётся Новая таблица, я её и переименовал:blink:
ради интереса в строке document.querySelector('Prestige').onclick... менял значение в скобках на любое... а ничего не происходит! В смысле - ошибки не возникает! |
<table id="as"> будет найдена по селектору querySelector("#as") - по идентификатору
<table class="as"> будет найдена по селектору querySelector(".as") - по имени класса <table> будет найдена по селектору querySelector("table") - по имени тега А querySelector("as") ничего не найдет. |
Цитата:
|
:blink: если нет атрибута Name, то где тогда хранится моё название?
|
убрал строку querySelector() ...ничего не поменялось
|
Цитата:
Вкратце, например, если Prestige, это имя переменной которая ссылается на объект (созданную таблицу), то добавить свой обработчик события, это Prestige.addEventListener("событие", .... Что такое "Новая таблица" бог и Гугл знает, а мне как-то не охота "освежать" мануал ее. :) У кого свежи "воспоминания" о ней подскажет, если сами не найдете в документации нужного. PS. Строго говоря и о чем надо было сказать, гугл таблица это в общем то не есть тег table, это несколько сложнее, так что в любом случае без API работать с ней не получится. |
Нашёл ID таблицы, опять пробую:
function myFunc() { function ready() { document.querySelector("#1I5PlV06KIWF00Xe83Lmvu-nPa-4-0UzKn5DDdWQIGxM").onclick = (event) => { let cell = event.target; if (cell.tagName.toLowerCase() != 'td') return; let i = cell.parentNode.rowIndex; let j = cell.cellIndex; console.log(i, j); }}}; Пусто!!! Пробую хотя-бы так: function myFunc1() { function ready() { "#1I5PlV06KIWF00Xe83Lmvu-nPa-4-0UzKn5DDdWQIGxM".onclick = function() { alert('Спасибо'); }; } } Ни-че-го! Что любопытно: натыкал в обеих процедурах точек останова, в редакторе нигде не останавливаются! |
Андрей_Ко,
document.addEventListener("DOMContentLoaded", () => { document.querySelector('table').addEventListener("click", (event) => { let cell = event.target; if (cell.tagName.toLowerCase() != 'td') return; let i = cell.parentNode.rowIndex; let j = cell.cellIndex; console.log(i, j); }); }); |
рони, а разве в ней таблица используется или я не о той гугл таблице думаю?
|
laimas,
без понятия. |
Цитата:
|
laimas,
не знаю гугл таблицы совсем. |
рони, простите, а у Вас этот листинг работает? Или это - просто набросок? Там в двух последних строках какая-то нескладуха со скобками
Вроде, так должно быть с закрывающими скобками: document.addEventListener("DOMContentLoaded", () => { document.querySelector('table').addEventListener("click", (event) => { let cell = event.target; if (cell.tagName.toLowerCase() != 'td') return; let i = cell.parentNode.rowIndex; let j = cell.cellIndex; console.log(i, j); }}) но теперь он ругается на первую строку:"Unexpected identifier" |
Цитата:
как там устроено у вас, я не знаю. <!doctype html> <html lang="ru"> <head> <meta charset="UTF-8"> <title>Document</title> <style type="text/css"> </style> <script> document.addEventListener("DOMContentLoaded", () => { document.querySelector('table').addEventListener("click", (event) => { let cell = event.target; if (cell.tagName.toLowerCase() != 'td') return; let i = cell.parentNode.rowIndex; let j = cell.cellIndex; alert([i, j]); }); }); </script> </head> <body> <table width="400" summary="" > <thead> <tr> <th>Title 1</th> <th>Title 2</th> <th>Title 3</th> </tr> </thead> <tbody> <tr> <td>Cell 1.1</td> <td>Cell 1.2</td> <td>Cell 1.3</td> </tr> <tr> <td>Cell 2.1</td> <td>Cell 2.2</td> <td>Cell 2.3</td> </tr> </tbody> </table> </body> </html> |
Стоп! Начнём с того, что вы таблицу(объект 'table') html-кодами создаёте, а у меня это объект - Гугл-таблица. А насчёт:
Цитата:
- Помогите с ремонтом мотоцикла... - Не знаю, как у мотоцикла, но вот в самосвале... |
Андрей_Ко,
вам куда-то сюда рыть ... https://developers.google.com/chart/interactive/docs/events там есть живой пример с кликом по таблице и выводом номеров строки и ячейки |
ни черта там не понял! там что-то про диаграммы, вроде... да ещё Хром-зараза! начинает переводить на русский и сам код!
|
Андрей_Ко,
там таблица Name Manager 1 Mary 2 John Mary 3 Steve Mary 4 Ellen Steve 5 Robert Steve кликните по имени или цифре |
рони,
ни черта у меня не выходит:nono: :пробую самый первый пример на той странице выполнить var table = new google.visualization.Table(document.getElementById('table_div')); table.draw(data, options); google.visualization.events.addListener(table, 'select', selectHandler); function selectHandler(e) { alert('A table row was selected'); } ... и на первой же строке - ошибка: "google is not defined" ============================================= может изначально мы не туда роем? я же имею ввиду НЕ "таблицы созданные в Google", а Google Sheets один из инструментов Google Docs, внешне похожий на лист Excel ! |
Андрей_Ко,
не могу помочь, ждите тех, кто работал с таблицами, или ищите форум со специалистами. |
К сожалению, на форумах по Гугл-таблицам обсуждают только встроенные формулы, увы, а про скрипты и не заикаются.:blink:
|
https://developers.google.com/apps-s...riggers/events
Это что есть из событий, также можно определить и пользовательские функции. Не понятно только какую таблицу вы все пытаетесь в ней найти, в ней все строится не на table. |
Цитата:
|
Я ничего не думаю, у Google Sheets есть API, в его рамках и надо работать. Вот только нет в ней никаких td, по которым вы пытаетесь щелкнуть.
|
А где у меня td? Если только случайно пропустил. Я ищу в инете хоть что-то подходящее и пробую, пока безуспешно.
Вот очередное: /* * Функция getValuesBySheet() получает и возвращает все данные из таблицы * по ее id и листа с именем "Лист1". * * @return {array} sheet_values - Данные в виде двумерного массива */ function getValuesByActiveSheet () { var spreadsheet_id = "1I5PlV06KIWF00Xe83Lmvu-nPa-4-0UzKn5DDdWQIGxM", spreadsheet_link = SpreadsheetApp.openById( spreadsheet_id ), sheet_name = "Лист1", sheet_link = spreadsheet_link.getSheetByName( sheet_name ), sheet_values = sheet_link.getDataRange().getValues(); Logger.log( sheet_values ); return sheet_values; } При запуске ошибка: Вам не разрешено вызывать пользователя SpreadsheetApp.openById. Необходимые разрешения: https://www.googleapis.com/auth/spreadsheets. (строка 9, файл Копия 1) Ничего не понимаю...:blink: |
Цитата:
Цитата:
|
Спросил...
Гугл изменил разрешение на использование openById... Нарыл в инете вариант обхода проблемы с использованием ф-ции getFileById(ID), теперь ошибка исчезла но вываливается окно с требованием дать доступ... и в конце:"Это приложение ещё не проверено в Google. Продолжайте, только если вы доверяете разработчику", но кнопки "Продолжать" там нет... |
Это не ко мне вопросы, о чем я помню, это авторизация, получение токена, и только потом возможна работа. Все это через API в РНР.
|
Часовой пояс GMT +3, время: 03:42. |