我有一个Google脚本,它导入TSV文件并将内容复制到Google电子表格中(代码不是我的,我在Google上搜索了一下后从别人的项目中复制了它)。
经过一些修补之后,脚本运行得很好,但我一直收到“range width不正确,是1但应该是6(第46行,文件"Test")”的错误。
现在,导入的TSV文件基本上是一个由6列组成的列表,即:
fruits vegetables cars countries colors names
pear carrot ford nicaragua yellow frank在阅读了arrayofarrays的工作原理并搜索了相同的错误后,我得出的结论是,问题是在导入/输出过程中的某个地方,添加了最后一个空行。例如:我有2行6列,而不是2行6列,第三行有1个空列。
显然,all数组需要所有行的宽度完全相同。
据我所知,这个额外的列不存在于源文件中。我也不能修改源文件,因此任何修复都需要由脚本本身完成。
就像我说的,脚本是有效的,但我希望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);
}
}发布于 2016-09-18 18:08:55
不知道这是否有帮助。但是,你有没有尝试过谷歌工作表上的appendRow() method?您可以将数组操作为所需的项目格式,然后循环将其追加到工作表中的下一个空行中。
在过去,我遍历数组试图找出位置,但后来开始使用appendRow()方法,它使我的工作变得更容易。
https://stackoverflow.com/questions/39553472
复制相似问题