2013-02-04 5 views
-1

CSV 파일 가져 오기에서 스크립트를 작성하는 방법에 대해서는 Google Interacting With Your Docs List tutorial을 따랐습니다. 많은 도움을받은 후에 일하게되었습니다. 그러나 복사하거나 어떤 식 으로든 수정하려고하면 오류 메시지와 함께 시간 초과가 발생합니다.CSV 가져 오기 중 최대 실행 시간 초과

최대 실행 시간을 초과했습니다.

... 실행되지 않습니다. 왜 이런 일이 일어날까요?

이 튜토리얼에서 importFromCSV() 기능은 다음과 같습니다

function importFromCSV() { 
    var fileName = Browser.inputBox("Enter the name of the file in your Docs List to import (e.g. myFile.csv):"); 

var files = DocsList.getFiles(); 
    var csvFile = ""; 

    for (var i = 0; i < files.length; i++) { 
    if (files[i].getName() == fileName) { 
     csvFile = files[i].getContentAsString(); 
     break; 
    } 
    } 
    var csvData = CSVToArray(csvFile, ","); 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getActiveSheet(); 
    for (var i = 0; i < csvData.length; i++) { 
    sheet.getRange(i+1, 1, 1, csvData[i].length).setValues(new Array(csvData[i])); 
    } 
} 
+0

"* times out *"의 오류 메시지는 무엇이며 "* 나는 복사하거나 수정하려고합니다 *"라는 의미는 무엇입니까? – Jacobvdb

+0

오류 메시지가 나타납니다 : 최대 실행 시간을 초과했습니다. 2 개의 csv 파일로 작업 할 수있는 스크립트가 있는데 200 개가 넘는 고유 한 CSV 파일 쌍이 필요합니다. 파일 이름을 변경하면 스크립트가 작동을 멈 춥니 다. – user2033763

+0

누군가가 적절한 답을 줄 수 있도록 정보를 너무 적게줍니다. –

답변

2

CSV 가져 오기의 예는 모든 행에 대한 CSVToArray 전화를한다. 천천히.

Best Practices Doc에있는 조언을 확인하십시오. 첫 번째 지침은 다른 서비스에 대한 호출을 줄이는 것입니다. 예제를 변경하여 배열의 모든 행을 업데이트 한 다음 var arrData = [[]]을 한 번만 호출하면 성능이 크게 향상됩니다.

이 교체 :이

for (var i = 0; i < csvData.length; i++) { 
    sheet.getRange(i+1, 1, 1, csvData[i].length).setValues(new Array(csvData[i])); 
} 

:

sheet.clear(); 

var numRows = csvData.length; 
var numCols = csvData[0].length; // assume all rows are same width 

// Make a single call to spreadsheet API to write values to sheet. 
sheet.getRange(1, 1, numRows, numCols).setValues(csvData); 
SpreadsheetApp.flush(); 

내가 대신이 같은 배열 선언, 나는이 var arrData = new Array()에 몇 줄을 변경할 필요가 있다고 발견 : setValues()을, I 이것을 사용했습니다 : setValues. (자바 스크립트에서) 문제가되지 않지만 (Google Apps Script에서) 발생했습니다.