0

스프레드 시트에 연결된 전자 메일 주소를 수집하는 Google 양식이 있습니다. Google Apps 스크립트 (도구 -> 스크립트 편집기)를 통해 새 이메일이 추가 될 때마다 양식을 통해 수집 된 이메일 주소에 대한 액세스 권한을 부여하고 싶습니다. 스프레드 시트에서 칼럼 1은 타임 스탬프이고 칼럼 2는 이메일입니다. 다른 중요하지 않은 데이터도 있습니다. 행은 중요하지 않습니다. 내가 오류 "ReferenceError가 :"수Google 애플리케이션 스크립트를 통해 특정 폴더에 대한보기 권한을 부여하는 방법

function giveaccess() { 
    var sheet = SpreadsheetApp.getActiveSheet(); 
    var startColumn = 2; 
    var numColumns = 99; 
    var dataRange = sheet.getRange(startColumn, 2, numColumns, 99) 
    var data = dataRange.getValues(); 
    for (i in data) { 
    var row = data[i]; 
    var emailAddresses = row[0]; 
    addViewers(emailAddresses) 
    } 
} 

이 지금까지 내 코드입니다. "정의되지 않은"addViewers을 그러나 나는 누군가 내가 위에 언급 한 것을 수행하는 다른 방법을 말해주기를 바랍니다. 감사! : D

나는 귀하의 통지에 몇 점을 가지고 싶습니다

답변

0

:

  1. addViewers() 한 장에 호출해야합니다 (sheet.addViewers(emailAddressesArray)을 같은) 및 이메일 주소의 배열을 필요로하고 현재 당신이주는거야 그것의 시트의 행과 어떤 시트에 전화하지. 당신이 그렇게 할 이유 https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet#addviewersemailaddresses

  2. 에 getValues ​​()는 당신이 99 열을 가져 오는 것 2 차원 배열

  3. 에게 반환, 나는하지 않습니다. 나는 네가 여기서 뭔가 잘못되었다고 말하는 것이 아니다.

  4. 여기가 잘못 생각합니다. 올바른 : getRange(row, column, numRows, numColumns) 너의 : getRange(startColumn, 2, numColumns, 99) https://developers.google.com/apps-script/reference/spreadsheet/sheet#getrangerow-column-numrows-numcolumns

제안 된 해결 :

  1. 가 배열로 이메일 열을

  2. 넣어 이메일을 가져옵니다. array.push (전자 메일)를 사용할 수 있습니다.

  3. 그런 다음 액세스 할 시트에 addViewers를 호출하고 이메일 주소 배열을 전달하십시오. sheet.addViewers(emailAddressesArray);처럼

효율적인 솔루션이 아니라 모든 이메일 ID를 추가하는 대신에만 새로 제출 된 이메일 ID를 추가하는 것입니다.

편집 : 새로 제출 한 이메일 만 추가하는 방법과 기존 폴더에 대한 액세스 권한을 부여하는 방법.

새로 제출 된 응답은 시트 맨 아래에 삽입되므로 마지막 행을 가져 와서 마지막으로 제출 한 응답을받을 수 있습니다. [그러나 당신의 양식이 매우 무겁게 사용된다면 이것은 실패 할 수도 있습니다. 그렇지 않으면 괜찮습니다.]

그리고 마지막 행을 가져 오기 위해, 우리는 당신이 ID를 기준으로 폴더를 가져 와서 그에 대한 액세스를 제공함으로써 기존 폴더에 대한 액세스 권한을 부여 할 수 sheet.getLastRow()

https://developers.google.com/apps-script/reference/spreadsheet/sheet#getlastrow

를 사용할 수 있습니다.아이디 폴더의

https://developers.google.com/apps-script/reference/drive/drive-app#getfolderbyidid

해당 폴더의 URL에 존재한다. (나는 간단한 구글 검색이 이것에 관해 충분하게 인도 할 것이라고 생각한다. 그래서 이것을 언급하는 것을 건너 뛰고있다.)

Lemme은 당신의 생각을 안다.

감사합니다. 애플리케이션 스크립트를 사용하여 드라이브 폴더에있는 파일을 공유

+0

미안하지만 여전히 이해할 수 없습니다. 필요한 코드를 다시 입력 할 수 있습니까? 나는 너무 많이 묻지는 않았지만 Javascript를 모른다. (아직) 편집 : 어떻게 모든 사람들에게 전자 메일을 보내는 것처럼 모든 전자 메일 대신 새로 제출 된 전자 메일을 추가 할 수 있을까요? 이전에 가입했습니다. 그리고 이미 기존의 Google 드라이브 폴더에 링크 할 수 있습니까? – amadawn

+0

내 답변을 귀하의 점수로 업데이트했습니다. 1. 새로 이메일 (2)에 대한 액세스 권한을 부여 제출 페치 기존 폴더 – Umair

0

setSharing(accessType, permissionType)으로 수행 할 수 있습니다

setSharing(accessType, permissionType)

Sets which class of users can access the File and what permissions those users are granted, besides any individual users who have been explicitly given access.

샘플 코드 : Enum Access에서 발견되는 액세스 유형에 대한

// Creates a folder that anyone on the Internet can read from and write to. (Domain 
// administrators can prohibit this setting for users of a G Suite domain.) 
var folder = DriveApp.createFolder('Shared Folder'); 
folder.setSharing(DriveApp.Access.ANYONE, DriveApp.Permission.EDIT); 

다른 값 :

- ANYONE 
- ANYONE_WITH_LINK 
- DOMAIN 
- DOMAIN_WITH_LINK 
- PRIVATE 
+0

하지 않습니다 "VAR 폴더 = DriveApp.createFolder ('공유 폴더'); folder.setSharing (DriveApp.Access.ANYONE, 드라이브 앱. Permission.EDIT); " 누군가가 양식을 채울 때마다 bew 폴더를 만드시겠습니까? – amadawn

관련 문제