2016-11-15 3 views
0

아주 간단한 질문입니다.사용자가 볼 수없는 스프레드 시트의 '소유자'로 Google 스크립트를 실행하려면 어떻게해야합니까?

저는 "MasterSheet"라는 별도의 시트 (여기에서 여러 유용한 Q &의 도움을 받음)로 셀에 글을 쓰는 Google Script를 만들었습니다. 이것은 궁극적으로 개별 사용자에게 제공하는 여러 시트에 임베디드 배포됩니다.

사용자가 "MasterSheet"에 대한 수정 권한을 가지고있을 때 완벽하게 작동하지만 비공개 상태로 유지해야합니다. 즉 나 외에는 볼 수 없습니다.

배경 : 각 '사용자 시트'에서 IMPORTRANGE는 사용자가 볼 수있는 '마스터 시트'에서 열을 가져 오는 데 사용되며 스크립트는 사용자가 마스터 시트에 주석을 추가 할 수있게합니다. 하나의 통합 된 시트에서 다양한 사용자의 주석이있는 모든 열을 보려면 MasterSheet를 볼 수 있지만 개별 사용자는이를 볼 수 없어야합니다.

시트를 작성하기위한 특정 스크립트는 매우 일반적이다 :

function saveCommentToMasterSheet(form){ 
    var company = form.company, 
     contact = form.contactselect, 
     comment = form.message , 
     ss = SpreadsheetApp.openById("MASTERSHEET_ID").getSheetByName('MasterSheet'); 
    if(company=="all"){ 
    var row = findCell(contact); 
    } else { 
     var row = findCell2(contact,company); 
    } 
    //^The above finds the specific row number relating to the entry the user wants to comment on. 
    var cell2 = ss.getRange(row,11); 
    // ^In this case '11' is the column related to this sheet's specific user, I've made separate sheets for each user that are identical except this column number 
    cell2.setValue(comment); 
} 

내가 링크가있는 사람에게 MasterSheet 편집 할 수 있다고 생각하지만, 오히려 스크립트가 특히로서,이를 방지 것 각 스프레드 시트에 포함되어 있으므로 사용자가 방금 본 경우 MasterSheet ID를 찾을 수 있습니다.

나는 실행 API를 사용하여 나를 스크립트로 실행할 수 있음을 알고 있지만 솔직히 말해서 나는 그 일을 이해하기 위해 조금 고생했다.

죄송합니다. 간단한 질문을 드려 죄송합니다. 좋은 검색 결과를 얻었지만 알아낼 수 없습니다.

감사합니다. 알렉스

N.B. 이 Running a google script from within a spreadsheet, but as a different user? 비슷한 질문을 보이지만 정말 사용자의 스프레드 시트 내에서 주석 시스템을 유지하고 싶습니다.

당신은 사용자에게 배포 된 스프레드 시트에서 마스터 스프레드 시트에 POST 요청을 할 수 있습니다
+0

마스터 스프레드 시트에 바인드 된 프로젝트에'doPost (e)'함수를 넣으십시오. 그런 다음 스크립트를 웹 응용 프로그램으로 게시하십시오. 사용자에게 배포 될 스프레드 시트에 원래 함수를 남겨두고 제거하려는 모든 코드는 마스터 스프레드 시트에 바인딩 된 프로젝트의 함수로 남겨 둡니다.현재 마스터 스프레드 시트에 데이터를 쓰는 현재 함수는 더 이상 직접 수행하지 않습니다. 분산 스프레드 시트의 현재 함수는 마스터 스프레드 시트에서'doGet (e) '함수를 호출하고'e'에 데이터를 보냅니다. –

답변

1

:

Apps Script Documentation - UrlFetchApp.fetch()

function saveCommentToMasterSheet(form) {//Function in the 
    //spreadsheets distributed to the users 
    var options,responseCode,url; 

    url = "https://script.google.com/macros/s/File_ID/exec";//Get from publishing 

    options = {}; 
    options.method = 'post'; 
    options.payload = form; 

    responseCode = UrlFetchApp.fetch(url, options).getResponseCode(); 

    Logger.log('responseCode: ' + responseCode);//View the Logs 
}; 

은 위의 코드는 마스터 스프레드 시트의 doPost(e) 기능을 트리거를하고 넣어 데이터를 이벤트 객체 e에 저장합니다.

그런 다음 e에서 데이터를 가져 와서 데이터를 직접 마스터 스프레드 시트 인 활성 스프레드 시트에 쓸 수 있습니다. "Me"로 실행되도록 웹 응용 프로그램을 게시하십시오.

게시 된 웹 응용 프로그램에는 두 가지 버전이 있습니다. "dev"버전과 "exec"버전. "dev"버전은 항상 최신 변경 사항으로 실행되지만 프로덕션 환경에서는 사용하지 않아야합니다. "exec"버전에는 스크립트를 다시 게시 할 때마다 새 버전이 있습니다. 프로덕션 환경에서 최신 "exec"버전을 사용하려면 최신 코드를 계속 게시해야합니다.

+0

대단히 고마워요. 양식 유료 하중에 사용자 ID 번호를 추가 할 때 유선형으로도 도움이되었습니다. 다른 사람이 읽는 경우 - 시트 업데이트를 위해 새로운 버전의 웹 앱을 게시해야한다는 사실을 깨닫지 못해서이 시간이 오래 걸렸습니다. – glynnder

+0

작동 해 주신 것을 알려 주셔서 감사합니다. "exec"버전에 대한 설명을 업데이트했습니다. –

관련 문제