2015-01-12 2 views
0

다른 사용자와 공유되는 스프레드 시트가 있습니다. 많은 셀이 범위를 보호합니다. 그러나 메뉴를 통해 사용자가 보호 된 범위 중 일부를 수정하는 스크립트 (따라서 외부 라이브러리에 액세스하여 보이지 않고 사용자의 제어를받지 않음)를 실행할 수 있습니다. 그러나 스크립트는이 작업을 수행 할 수있는 권한이 없음을 알립니다.스크립트를 관리자 권한으로 실행하여 스프레드 시트를 업데이트하도록 허용

이 라이브러리를 라이브러리 'admin'권한으로 실행하여 보호로 인해 버려지는 옵션이 있습니까?

Thx!

+0

셀에서 변경하려는 데이터의 양과 데이터의 종류 (값, 형식 등)는 얼마입니까? 세포가 많이 있습니까? 두 가지 방법, GET 매개 변수를 허용하는 게시 된 HTML 및 Oauth2 인증을 알고 있습니다. – Kriggs

+0

안녕하세요 크릭 스입니다. 귀하의 회신에 감사드립니다. 왜 그것이 관련성이 있는지 잘 모르겠습니다. 당신은 정교 할 수 있습니까? 어쨌든 대부분의 경우 워크 시트 전체에서 몇 개의 셀이 도움이된다면 바뀔 것입니다. 감사. – theworldismyoyster

답변

2

documentation에 따르면 ". 라이브러리 기능/리소스의 자체 인스턴스가없는 대신 그것을 호출 스크립트에 의해 생성 된 하나를 사용한다"

그래서 라이브러리 방법이 아니다 가다.

"실행중인 사용자"로 배포 할 서비스 (배포 된 웹 응용 프로그램에서 doGet() 기능)로 실행되는 독립 실행 형 스크립트를 사용하고이를 알려주는 매개 변수를 호출하여 해당 동작을 수행 할 수 있습니다 대상 스프레드 시트 범위에서 수행 할 작업.


편집는 :

function doGet(e) { 
    if(e.parameter.mode==null){return ContentService.createTextOutput("error, wrong request").setMimeType(ContentService.MimeType.TEXT)}; 
    var coord = e.parameter.coord; 
    var mode = e.parameter.mode; 
    var value = e.parameter.value; 
    var ss = SpreadsheetApp.openById('11myX1YX_________________FS6BesaBEnQ'); 
    var sh = ss.getSheetByName(e.parameter.sN); 
    if(mode=='r'){ 
    var sheetValue = JSON.stringify(sh.getRange(coord).getValue()); 
    var valToReturn = ContentService.createTextOutput(sheetValue).setMimeType(ContentService.MimeType.JSON); 
    return valToReturn; 
    } 
    if(mode=='w'){ 
    sh.getRange(coord).setValue(value); 
    return ContentService.createTextOutput(value).setMimeType(ContentService.MimeType.JSON); 
    } 
    return ContentService.createTextOutput('error').setMimeType(ContentService.MimeType.TEXT); 
} 

위의 스크립트는 다음 매개 변수를 사용하여 배포해야합니다 : 가장 기본적인 구현에 당신은 서버 응용 프로그램으로 이와 같은 간단한 스크립트를 사용할 수 있습니다 enter image description here

그런 다음 아래와 같은 간단한 URL을 가져올 수로 사용할 수 있습니다 :

var url = "https://script.google.com/macros/s/AKfycbxs9M0ib-VRmmcVJ0UUJXmHITOrWcoG8bYrK4EK7Tvl0krzsYc/exec" 

function testServerLink(){ 
    var coord = 'A3';//coordinates in A1 notation 
    var sheetName = 'Sheet1'; 
    var data = 'test value'; 
    var mode = 'w';// w for "write" and r for "read" 
    var write = sheetService(mode,coord,sheetName,data); 
    Logger.log(write);//shows the result in logger 
    var read = sheetService('r','A1',sheetName,data); 
    Logger.log(read);//shows the value that was in A1 cell 
} 


    function sheetService(mode,coord,sheetName,data){ 
     Logger.log(url+"?mode="+mode+"&coord="+coord+"&sN="+sheetName+"&value="+data);// shows the actual url with parameters, can be tested in a browser 
     var result = UrlFetchApp.fetch(url+"?mode="+mode+"&coord="+coord+"&sN="+sheetName+"&value="+data); 
     return result 
    } 
+0

안녕 Serge. 고마워. 더 많은 정보를 얻을 수있는 곳을 더 알려줄 수 있습니까? 웹 애플리케이션을 호출하는 메뉴 항목을 사용할 수 있습니까? 어떻게 매개 변수를 전달할 수 있습니까? 어떤 도움이라도 좋을 것입니다. 다시 한번 감사드립니다. – theworldismyoyster

+1

오늘 밤 집에 돌아 가면 코드 샘플로 업데이트 할 예정입니다. –

+1

많은 감사를드립니다! 이것은 매우 도움이됩니다! 곧 그것을 시도 할 것입니다. 이 단계에서 제가 그것을 받았음을 당신이 알기를 바랍니다. – theworldismyoyster

관련 문제