Google Apps Script에서 콘솔로 인쇄 하시겠습니까?
저는 프로그래밍에 익숙하지 않습니다 (Codecademy에서 일부 JS 과정을 수강했습니다). 포커 게임 결과가 포함 된 스프레드 시트가 주어지면 누구에게 지불해야하는지 간단한 스크립트를 작성하려고합니다. Google Apps Script를 열고 시작하기 위해 다음을 작성했습니다.
function addplayerstoArray(numplayers) {
var playerArray = [];
for (i=0; i<numplayers; i++) {
playerArray.push(i);
}
}
addplayerstoArray(7);
console.log(playerArray[3])
아이디어는 총 플레이어 수로 배열을 만드는 것입니다. 코드를 실행할 때 콘솔에 "3"이 출력 될 것이라고 생각했습니다. 그러나 아무 일도 일어나지 않았습니다. 그것은 말했다
"ReferenceError :"콘솔 "이 정의되지 않았습니다."
A) 내 코드가 내가 원하는 것을 수행하는지 확인할 수 있도록 인쇄와 관련하여 Google Apps Script 콘솔이 어떻게 작동하는지 이해하지 못하는 것은 무엇입니까?
B) 코드에 문제가 있습니까?
코드가 브라우저가 아닌 클라우드에서 실행 중이므로 콘솔을 사용할 수 없습니다. 대신 GAS에서 제공 하는 Logger 클래스를 사용하세요 .
Logger.log(playerArray[3])
그런 다음보기> 로그 ... 아래의 IDE에서 결과를 봅니다.
다음 은 GAS 로깅 에 대한 몇 가지 문서입니다 .
수정 : 2017-07-20 Apps 스크립트는 이제 Stackdriver Logging 도 제공합니다 . 보기-콘솔 로그 아래의 스크립트 편집기에서 이러한 로그를 봅니다.
위의 vinnief의 해키 솔루션을 구축하기 위해 다음과 같이 MsgBox를 사용합니다.
Browser.msgBox('BorderoToMatriz', Browser.Buttons.OK_CANCEL);
중단 점과 같은 역할을하고 스크립트를 중지하고 필요한 문자열을 팝업 상자에 출력합니다. 특히 Logger.log에 문제가있는 Sheets에서 대부분의 경우 적절한 해결 방법을 제공합니다.
OP 질문에 답하기
A) 내 코드가 내가 원하는 것을 수행하는지 확인할 수 있도록 인쇄와 관련하여 Google Apps Script 콘솔이 어떻게 작동하는지 이해하지 못하는 것은 무엇입니까?
Google Apps Script 프로젝트의 .gs 파일에있는 코드는 웹 브라우저가 아닌 서버에서 실행됩니다. 메시지를 기록하는 방법은 Class Logger 를 사용하는 것 입니다.
B) 코드에 문제가 있습니까?
오류 메시지에서 말했듯이 문제는 console
정의되지 않았지만 오늘날 동일한 코드가 다른 오류를 발생시킵니다.
ReferenceError : "playerArray"가 정의되지 않았습니다. (12 행, 파일 "Code")
이는 playerArray가 지역 변수로 정의되기 때문입니다. 함수에서 줄을 이동하면이 문제가 해결됩니다.
var playerArray = [];
function addplayerstoArray(numplayers) {
for (i=0; i<numplayers; i++) {
playerArray.push(i);
}
}
addplayerstoArray(7);
console.log(playerArray[3])
이제 코드가 오류없이 실행되므로 브라우저 콘솔 대신 Stackdriver Logging을 살펴 봐야합니다. Google Apps Script 편집기 UI에서 보기> Stackdriver Logging을 클릭합니다 .
추가
2017 년에 Google은 모든 스크립트 Stackdriver Logging을 출시하고 클래스 콘솔을 추가했습니다. 따라서 다음과 같은 것을 포함해도 console.log('Hello world!')
오류가 발생하지 않지만 로그는 브라우저 콘솔이 아닌 Google Cloud Platform Stackdriver Logging Service에 있습니다.
에서 Google 애플리케이션 스크립트 릴리스 노트 2017
2017 년 6 월 23 일
Stackdriver Logging 이 앞서 해보기 에서 이동되었습니다. 이제 모든 스크립트가 Stackdriver 로깅에 액세스 할 수 있습니다.
다음 예에서는 콘솔 서비스를 사용하여 Stackdriver에 정보를 기록 하는 방법을 보여줍니다 .
function measuringExecutionTime() { // A simple INFO log message, using sprintf() formatting. console.info('Timing the %s function (%d arguments)', 'myFunction', 1); // Log a JSON object at a DEBUG level. The log is labeled // with the message string in the log viewer, and the JSON content // is displayed in the expanded log structure under "structPayload". var parameters = { isValid: true, content: 'some string', timestamp: new Date() }; console.log({message: 'Function Input', initialData: parameters}); var label = 'myFunction() time'; // Labels the timing log entry. console.time(label); // Starts the timer. try { myFunction(parameters); // Function to time. } catch (e) { // Logs an ERROR message. console.error('myFunction() yielded an error: ' + e); } console.timeEnd(label); // Stops the timer, logs execution duration. }
Logger.log()
기술적으로 콘솔에 무언가를 출력하는 올바른 방법 이지만 몇 가지 성가심이 있습니다.
- 출력은 구조화되지 않은 엉망이되어 빠르게 소화하기 어려울 수 있습니다.
- 먼저 스크립트를 실행 한 다음보기 / 로그를 클릭해야합니다. 두 번의 추가 클릭 (Ctrl + Enter 키보드 단축키를 기억하는 경우 한 번)입니다.
- 을 삽입해야하며
Logger.log(playerArray)
디버깅 후에는을 제거하고 싶을Logger.log(playerArray)
것이므로 추가로 1-2 단계가 더 필요합니다. - 오버레이를 닫으려면 확인을 클릭해야합니다 (다른 추가 클릭).
Instead, whenever I want to debug something I add breakpoints (click on line number) and press the Debug button (bug icon). Breakpoints work well when you are assigning something to a variable, but not so well when you are initiating a variable and want to peek inside of it at a later point, which is similar to what the op is trying to do. In this case, I would force a break condition by entering "x" (x marks the spot!) to throw a run-time error:
Compare with viewing Logs:
The Debug console contains more information and is a lot easier to read than the Logs overlay. One minor benefit with this method is that you never have to worry about polluting your code with a bunch of logging commands if keeping clean code is your thing. Even if you enter "x", you are forced to remember to remove it as part of the debugging process or else your code won't run (built-in cleanup measure, yay).
In a google script project you can create html files (example: index.html) or gs files (example:code.gs). The .gs files are executed on the server and you can use Logger.log as @Peter Herrman describes. However if the function is created in a .html file it is being executed on the user's browser and you can use console.log. The Chrome browser console can be viewed by Ctrl Shift J on Windows/Linux or Cmd Opt J on Mac
If you want to use Logger.log on an html file you can use a scriptlet to call the Logger.log function from the html file. To do so you would insert <? Logger.log(something) ?> replacing something with whatever you want to log. Standard scriptlets, which use the syntax <? ... ?>, execute code without explicitly outputting content to the page.
참고URL : https://stackoverflow.com/questions/12377640/printing-to-the-console-in-google-apps-script
'program tip' 카테고리의 다른 글
Eclipse의 프록시 설정을 사용하지 않는 Maven 플러그인 (0) | 2020.11.20 |
---|---|
추상 클래스의 getClass ()는 모호한 메서드 호출을 제공합니다. (0) | 2020.11.20 |
생성자 코드가 Java에서 실행되기 전에 필드가 초기화됩니까? (0) | 2020.11.20 |
스트림에서 Collections.toMap ()을 사용할 때 List의 반복 순서를 어떻게 유지합니까? (0) | 2020.11.20 |
서로를 참조하는 여러 기능이있는 ES6 내보내기 기본값 (0) | 2020.11.20 |