2016-09-18 29 views
0

我有一個谷歌腳本導入TSV文件,並將內容複製到谷歌電子表格(代碼不是我的,我複製了谷歌搜索後,別人的項目)。谷歌腳本 - arrayofarrays - 不正確的範圍寬度

經過一番修改後,腳本工作得很好,但我一直得到一個「不正確的範圍寬度,是1,但應該是6(第46行,文件」測試「)」錯誤。現在

,得到導入TSV文件基本上是由6列的列表,即:

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

上做arrayofarrays如何工作的一些研讀和google搜索同樣的錯誤後,我已經得出結論,問題是在導入/輸出過程中的某個地方,最後一個空行被添加。即:而不是有2行6列,我有2行6列和第三行1空列。

顯然arrayofarrays需要所有行是完全相同的寬度。

據我所知,這個額外的列不存在於源文件中。我也無法修改源文件,因此需要由腳本本身完成任何修復。

就像我說的,腳本可以工作,但我想a)停止收到關於腳本中的錯誤的電子郵件,以及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()方法,它使事情變得簡單。