- Вы хотите запустить скрипт, щелкнув изображение в электронной таблице.
- Вы хотите поместить изображения в столбец «A». В этом случае вы хотите поместить много изображений.
- Вы хотите добиться этого с помощью простого сценария.
Проблема и обходной путь:
- К сожалению, на текущем этапе, когда скрипт запускается нажатием на изображение на листе, скрипт не может знать, где щелкнуло изображение. Таким образом, к сожалению, в вашем случае, когда вы хотите запустить скрипт, щелкнув изображение, необходимо назначить каждому изображению другое имя функции.
- А также, когда скрипт запускается нажатием изображение, кажется, что функция ищется до запуска глобальных переменных. Таким образом, автоматическая установка функций с использованием скрипта не может быть достигнута.
Из вышеприведенной ситуации, чтобы достичь вашей цели, я хотел бы предложить следующие 2 шаблона.
Шаблон 1:
В этом шаблоне используются изображения, которым назначены функции. В этом случае в качестве примера предполагается, что на лист Ark1
помещается 5 изображений, и каждое изображение имеет имена функций, такие как copyPasteValue2
, copyPasteValue3
и т. Д.
Пример сценария :
Пример сценария выглядит следующим образом. Скопируйте и вставьте следующий скрипт в редактор скриптов.
function main(row) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = ss.getSheetByName('Ark1');
var [v, d] = s.getRange(`B${row}:C${row}`).getValues()[0];
var s2 = ss.getSheetByName('Ark2');
var timeZone = ss.getSpreadsheetTimeZone();
var t = Utilities.formatDate(new Date(), timeZone, 'HH:mm:ss dd-MM-yyyy');
s2.getRange(`A${row}:C${row}`).setValues([[t,v,d]]);
}
const copyPasteValue2 = () => main(2);
const copyPasteValue3 = () => main(3);
const copyPasteValue4 = () => main(4);
const copyPasteValue5 = () => main(5);
const copyPasteValue6 = () => main(6);
- В этом скрипте при нажатии на изображение с именем функции
copyPasteValue2
, 2
- строка изображения отдается функции main()
. Таким образом, copyPasteValue2
можно запустить как строку 2.
Примечание:
- О
const copyPasteValue2 = () => main(2); const copyPasteValue3 = () => main(3); ,,,
, формат постоянен. Так, например, я думаю, что вы также можете создать эти сценарии в виде текстового файла, а затем скопировать и вставить их в редактор сценариев. Если вы хотите вставить изображения в столбец " А «используя скрипт, вы можете использовать следующую функцию. При использовании этого, пожалуйста, установите идентификатор файла изображения на Google Drive. И, пожалуйста, установите sheetName
и max
.
function insertImages() {
var id = "###"; // Please set the file ID of the image.
var sheetName = "Sheet1"; // Please set the sheet name.
var max = 5; // Please set the number of images you want to put.
var blob = DriveApp.getFileById(id).getBlob();
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName(sheetName);
sheet.setRowHeights(2, max, 64).setColumnWidth(1, 64);
for (var i = 0; i < max; i++) {
sheet.insertImage(blob, 1, i + 2).setHeight(64).setWidth(64).assignScript("copyPasteValue" + (i + 2));
}
}
Шаблон 2:
В этом шаблоне я хотел бы предложить использовать флажки вместо изображение. В этом случае, используя триггер события OnEdit, когда флажок установлен, он может узнать координаты переключателя, который был выбран. Таким образом, сценарий может стать проще, чем шаблон 1.
Пример сценария:
function main(row) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = ss.getSheetByName('Ark1');
var [v, d] = s.getRange(`B${row}:C${row}`).getValues()[0];
var s2 = ss.getSheetByName('Ark2');
var timeZone = ss.getSpreadsheetTimeZone();
var t = Utilities.formatDate(new Date(), timeZone, 'HH:mm:ss dd-MM-yyyy');
s2.getRange(`A${row}:C${row}`).setValues([[t,v,d]]);
}
function onEdit(e) {
const range = e.range;
if (range.getSheet().getSheetName() == "Ark1" && e.value == "TRUE") {
main(range.rowStart);
range.uncheck();
}
}
- В приведенном выше сценарии предполагается, что столбец «А» на листе из
Ark1
имеет флажки. - В этом случае вы можете запустить скрипт, используя простой триггер.
Примечание:
- В этом В этом случае включите V8 в редакторе сценариев.
Ссылки:
Если я неправильно понял ваш вопрос, а это не то направление, в котором вы хотите, прошу прощения.