2016-09-18 8 views
0

TSV 파일을 가져 와서 내용을 Google 스프레드 시트로 복사하는 Google 스크립트가 있습니다. (코드는 광산이 아닙니다. 검색 한 후 다른 사람의 프로젝트에서 복사했습니다.)Google 스크립트 - arrayofarrays - 잘못된 범위 너비

약간의 조작 후 스크립트가 훌륭하게 작동하지만 "잘못된 범위 너비가 계속 1이지만 6 (줄 46, 파일"테스트 ") 오류 여야합니다.

자, 수입 점점 TSV 파일은 기본적으로 6 열로 구성된 목록, 즉이다 :

fruits vegetables cars countries colors names 
pear carrot  ford nicaragua yellow frank 

어떤 방법 arrayofarrays 작품에 독서와 같은 오류에 대한 인터넷 검색을 수행 한 후, 나는 결론을 내렸다했습니다 문제는 가져 오기/출력 프로세스의 어딘가에 마지막 빈 행이 추가된다는 것입니다. 즉 : 6 열 2 행 대신에 6 열 2 행, 빈 열 1 행 3 행이 있습니다.

분명히 arrayofarrays는 모든 행이 정확히 동일한 너비가되어야합니다.

내가 알 수있는 한,이 여분의 열은 소스 파일에 없습니다. 또한 소스 파일을 수정할 수 없으므로 스크립트 자체로 수정해야합니다.

내가 말했듯이, 스크립트는 작동하지만, 다음과 같이하고 싶습니다. 스크립트에서 오류에 대한 이메일을받지 못하게하고, b)이를 수정하는 방법을 이해합니다.

제안 사항?

미리 감사드립니다.

코드는 다음과 같습니다 (일부 수정 된 줄이 있는데, 명확하게 작동하지 않지만 수정을 위해 남겨 두었습니다).

function getFileIDFromName(fileName) { 
    // Return the file ID for the first 
    // matching file name. 
    // NB: DocsList has been deprecated as of 2014-12-11! 
    // Using DriveApp instead. 
    var files = DriveApp.getFiles(); 
    while (files.hasNext()) { 
    var file = files.next(); 
    if (file.getName() === fileName) { 
     return file.getId(); 
    } 
    } 
    return; 
} 
function getTsvFileAsArrayOfArays(tsvFileID) { 
    // Read the file into a single string. 
    // Split on line char. 
    // Loop over lines yielding arrays by 
    // splitting on tabs. 
    // Return an array of arrays. 
    var txtFile = DriveApp.getFileById(tsvFileID), 
     fileTextObj = txtFile.getAs('text/plain'), 
     fileText = fileTextObj.getDataAsString(), 
     lines = fileText.split('\n'), 
     lines2DArray = []; 
    lines.forEach(function (line) { 
        lines2DArray.push(line.split('\t')); 
       }); 
    return lines2DArray; 
} 
function writeArrayOfArraysToSheet(tsvFileID) { 
    // Target range dimensions are determine 
    // from those of the nested array. 
    var sheet = SpreadsheetApp.getActiveSheet(), 
     arrayOfArrays = getTsvFileAsArrayOfArays(tsvFileID), 
     dimensions = {rowCount: Math.floor(arrayOfArrays.length), 
       colCount: Math.floor(arrayOfArrays[0].length)}, 
     targetRng; 
    sheet.clearContents(); 
    targetRng = sheet.getRange(1, 1, 
          dimensions.rowCount, 
          dimensions.colCount); 
    //       .setValues(arrayOfArrays); 
    //targetRng = sheet.getRange(1, 1, arrayOfArrays.length, 6).setValues(arrayOfArrays); 
    //targetRng.setValues(arrayOfArrays); 
    targetRng.setValues(arrayOfArrays); 
} 
function runTsv2Spreadsheet() { 
    // Call this function from the Script Editor. 
    var fileName, 
     fileID, 
     file; 
    //fileName = Browser.inputBox('Enter a TSV file name:', 
    //      Browser.Buttons.OK_CANCEL); 
    //fileID = getFileIDFromName(fileName); 
    //Logger.log(fileID) 
    fileID = "0B-9wMGgdNc6CdWxSNGllNW5FZWM" 
    if (fileID) { 
    writeArrayOfArraysToSheet(fileID); 
    } 
} 

답변

1

이것이 도움이 될지 모르겠다. 하지만 Google 시트에 appendRow() method을 사용해 보셨습니까? 배열을 원하는 항목 형식으로 조작 한 다음 시트의 다음 빈 행에 추가하여 반복 할 수 있습니다.

이전에는 위치를 파악하려고 시도했지만 배열을 반복했지만 appendRow() 메소드를 사용하기 시작 했으므로 작업이 더 쉬워졌습니다.