我有一个谷歌脚本导入TSV文件并将内容复制到Google电子表格中(代码不是我的,我在谷歌搜索后将其复制到其他人的项目中)。
经过一些修修补补后,脚本效果很好,但我一直得到一个"不正确的范围宽度,为1但应该是6(第46行,文件"测试")"错误。
现在,导入的TSV文件基本上是一个由6列组成的列表,即:
fruits vegetables cars countries colors names
pear carrot ford nicaragua yellow frank
在阅读了有关arrayofarrays如何工作以及google搜索相同错误的一些内容之后,我得出结论,问题是在导入/输出过程中的某个地方,添加了最后一个空行。即:我有2行6列,而不是2行6列,第3行有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);
}
}
答案 0 :(得分:1)
不知道这是否有用。但是,您是否尝试过appendRow() method Google表格?您可以将数组操作为所需的项目格式,然后循环遍历到工作表中的下一个空行。
在过去,我通过数组试图找出位置,然后开始使用appendRow()方法,这让我更容易。