Получить строка/столбец "кликнутой" ячейки Гугл-таблицы
Скрипты только постигаю... работал исключительно в 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, время: 01:09. |