我有一個谷歌腳本導入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);
}
}