2016-09-18 21 views
0

私はTSVファイルをインポートし、その内容をGoogleスプレッドシートにコピーするGoogleスクリプトを持っています(コードは私のものではなく、ちょっとグーグルグーグルで他の人のプロジェクトからコピーしました)。Google Script - 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行を持っています。明らかにarrayof配列のすべての行が全く同じ幅である必要があります。

私の知る限り、この余分な列はソースファイルには存在しません。また、ソースファイルを修正することもできないので、スクリプト自体で修正する必要があります。

私の言っているように、スクリプトはうまくいきますが、私はスクリプトのエラーに関する電子メールを止めて、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()メソッドを使い始めました。

関連する問題