私は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);
}
}