2012-07-30 4 views
9

내 Google 사이트에 Google Apps Script를 쓰고 있으며 Google 스프레드 시트의 2 가지 다른 탭에서 제공하는 데이터를 사용하려고합니다. 내가 설명서에서 이해할 수 있다고 생각한 것부터 openById() 메서드를 사용하여 Sites 스크립트의 SpreadsheetApp 클래스에있는 사용 가능한 모든 메서드를 사용할 수있었습니다. 어쨌든 여기Google Apps Script를 통해 다른 Google 스프레드 시트의 데이터에 액세스하는 방법은 무엇인가요?

내가 오류를 얻을

function doGet(e) { 

    var doc = SpreadsheetApp.openById(SPREADSHEET_ID_GOES_HERE).getActiveSheet(); 
    SpreadsheetApp.setActiveSheet(doc.getSheetId()[1]); 

    //.... 
} 

을하려고 무엇

Cannot find method setActiveSheet(. (line 4)

나는이 링크 떨어져 내 작품을 당겨 해요 : Storing Data in Google Spreadsheets 또한 UI 서비스 부분은 건물 아래에 나열 사용자 인터페이스.

내가이 두 줄에서 잘못하고있는 것을 본 사람이 있습니까?

+1

나는 그것이 짜증나는 오류 및/또는 오타없이 시작하는 쉬운 방법입니다 ... 당신이 적용되지 않는 방법을 사용하여 구문 오류 또는을 방지하기 위해 스크립트 편집기의 자동 완성 기능을 사용해야 좋을 것 ;-) –

답변

18

setActiveSheet는 UI에서 표시 한 스프레드 시트, 즉 브라우저에서 연 스프레드 시트의 시트에만 사용해야합니다.

SpreadsheetApp.openById를 사용하면 데이터에 액세스하기 위해 스프레드 시트를 열려고하지만 브라우저에서는 열리지 않습니다. UI가 없습니다.

나는 https://developers.google.com/apps-script/class_spreadsheetapp?hl=es-ES#openById이 댓글을 발견 :

// The code below opens a spreadsheet using it's ID and gets the name for it. 
// Note that the spreadsheet is NOT physically opened on the client side. 
// It is opened on the server only (for modification by the script). 
var ss = SpreadsheetApp.openById("abc1234567"); 

몇 가지 예는 스크립트가 스프레드 시트에 실행되고 가정합니다. 스크립트를 서비스로 실행하고 있기 때문에 자신의 사용자 인터페이스가 있어야하는 것은 아닙니다.

+1

그것은 조금 실망입니다. 스프레드 시트에서 실행되지 않는 서비스를 통해 다른 탭의 데이터에 액세스하는 방법을 알고 계십니까? – Mathitis2Software

+1

getSheetByName ('시트 이름')을 사용합니다. 이름을 변경하지 않거나 영어를 사용하지 않는 한 기본적으로 'Sheet1'입니다. 예를 들어 불어로 기본 값은 'Feuille1'입니다. –

+1

getSheets 스프레드 시트의 모든 시트가 포함 된 배열을 가져옵니다. –

1

이 두 줄에는 적어도 하나의 문제가 있습니다. 첫 번째 방법은 setActiveSheet 메서드 매개 변수가 Sheet 클래스 개체이고 getSheetId 메서드가 정수 값을 반환한다는 것입니다. 그런데이 메소드 (getSheetId)는 not documented입니다. SpreadsheetApp에 ​​활성 스프레드 시트가없는 경우 두 번째 문제가 발생할 수 있습니다. 이 경우 "먼저 활성 스프레드 시트를 선택하십시오." 오류. SpreadsheetApp.setActiveSpreadsheet 메서드를 사용하여 활성 스프레드 시트를 설정합니다.

0

각 시트를 개별적으로 액세스해야합니다.

var ss = SpreadsheetApp.openById(SPREADSHEET_ID_GOES_HERE); 
var sheet = ss.getSheets()[0]; // "access data on different tabs" 
ss.setActiveSheet(sheet); 
+1

"다른 탭의 데이터에 액세스 한 다음 스프레드 시트에서 실행되지 않는 서비스를 통해 액세스하는 방법에 대해 알고 있습니까?" var sheet1 = ss.getSheets() [0]; –

+0

독립 실행 형 서비스를 통해 해당 방법에 액세스 할 수없는 것 같습니다. getSheetID(), getSheetName() 및 getSheetValues ​​()를 사용해야하는 것 같아요. – Mathitis2Software

4

내가 megabyte1024는 구문 오류를 해결 @ 생각하지만, 대답 @YoArgentina에 귀하의 코멘트에 :

Do you happen to know of a way to access data on different tabs then through a service not running inside the Spreadsheet?

도움의이 종류를합니까?

var ss = SpreadsheetApp.openById(SPREADSHEET_ID_GOES_HERE); 
var sheets = ss.getSheets(); 
// the variable sheets is an array of Sheet objects 
var sheet1A1 = sheets[0].getRange('A1').getValue(); 
var sheet2A1 = sheets[1].getRange('A1').getValue(); 
+0

getSheets()가 스프레드 시트 스크립트 외부에서 액세스 할 수없는 것 같습니다.>> TypeError : 객체 시트에서 getSheets 함수를 찾을 수 없습니다. (라인 4) – Mathitis2Software

+1

원래 게시물에서와 같이'var doc = SpreadsheetApp.openById (SPREADSHEET_ID_GOES_HERE) .getActiveSheet(); '를 사용 하시겠습니까? 이 게시물의 코드에서'ss'는 Sheet 객체가 아니라 Spreadsheet 객체 여야합니다. – AdamL

+0

예, 100 % 정확합니다. 나는 그것을 완전히 놓쳤다. 매우 감사합니다. – Mathitis2Software

관련 문제