내 이전 게시물에서 ( Google 시트에서 아이콘을 클릭하여 한 셀에서 다른 시트로 셀 값 자동 복사 ) 이제 다른 사람이 나를 도와 주었으면 하는 새로운 문제가 발생했습니다.
익명의 사용자가 A 열의 아이콘을 클릭 할 수 있고 B 열과 C 열의 데이터가 타임 스탬프를 포함하여 sheet1에서 sheet2로 이동되는 스프레드 시트를 만들려고합니다.
여태까지는 그런대로 잘됐다. 이 훌륭한 커뮤니티의 도움으로 실행되고 있습니다. 이 스크립트를 사용하고 있습니다.
function copyPasteValue2() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = ss.getSheetByName('Ark1');
var r = s.getRange('b2');
var v = r.getValue();
var a = s.getRange('c2');
var d = a.getValue();
var s2 = ss.getSheetByName('Ark2');
var timeZone = ss.getSpreadsheetTimeZone();
var t = Utilities.formatDate(new Date(), timeZone, 'HH:mm:ss dd-MM-yyyy');
s2.getRange('A2:C2').setValues([[t,v,d]]);
}
이제이 시트를 확장하고이 기능을 가진 100 개 이상의 항목을 포함하고 있습니다. A 열의 아이콘을 클릭하고 C와 B의 데이터를 시트 2로 이동합니다.
내 질문은 다른 100 개의 스크립트를 만들지 않고 어떻게 이것을 달성 할 수 있습니까? 여기에서 천천히 진행하면서 지금까지 내 검색이 해결책으로 반환되지 않았습니다.
여기에 도움이되는 테스트 시트를 만들었습니다 : https://docs.google.com/spreadsheets/d/1z5TGWp3N002z0GNts4NRyspkjXcsN52rxPtx8Pu9D70/edit#gid=
위 상황에서 목표를 달성하기 위해 다음 2 가지 패턴을 제안하고자합니다.
이 패턴에서는 기능이 할당 된 이미지가 사용됩니다. 이 경우, 샘플, 그것은 5 개 화상이 시트에 넣어 것을 전제로 Ark1
하고, 각각의 이미지와 같은 기능 이름 갖고 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); ,,,
형식은 일정합니다. 예를 들어 이러한 스크립트를 텍스트 파일로 생성 한 다음 스크립트 편집기에 복사하여 붙여 넣을 수도 있습니다.스크립트를 사용하여 "A"열에 이미지를 삽입하려면 다음 기능을 사용할 수 있습니다. 이것을 사용할 때 Google 드라이브에 이미지의 파일 ID를 설정하십시오. 그리고 설정하십시오 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));
}
}
이 패턴에서는 이미지 대신 체크 박스를 사용하는 것을 제안하고 싶습니다. 이 경우 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
확인란이 있다고 가정합니다 .내가 당신의 질문을 오해하고 이것이 당신이 원하는 방향이 아니라면 사과드립니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다