首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Google脚本- arrayofarrays数组-范围宽度不正确

Google脚本- arrayofarrays数组-范围宽度不正确
EN

Stack Overflow用户
提问于 2016-09-18 10:26:24
回答 1查看 261关注 0票数 0

我有一个Google脚本,它导入TSV文件并将内容复制到Google电子表格中(代码不是我的,我在Google上搜索了一下后从别人的项目中复制了它)。

经过一些修补之后,脚本运行得很好,但我一直收到“range width不正确,是1但应该是6(第46行,文件"Test")”的错误。

现在,导入的TSV文件基本上是一个由6列组成的列表,即:

代码语言:javascript
复制
fruits vegetables cars countries colors names
pear   carrot     ford nicaragua yellow frank

在阅读了arrayofarrays的工作原理并搜索了相同的错误后,我得出的结论是,问题是在导入/输出过程中的某个地方,添加了最后一个空行。例如:我有2行6列,而不是2行6列,第三行有1个空列。

显然,all数组需要所有行的宽度完全相同。

据我所知,这个额外的列不存在于源文件中。我也不能修改源文件,因此任何修复都需要由脚本本身完成。

就像我说的,脚本是有效的,但我希望a)停止收到关于我脚本中错误的电子邮件,b)了解如何修复这个问题。

有什么建议吗?

提前谢谢。

以下是代码(有一些注释行,我在其中尝试了一些显然不起作用的修复,但为了完成,我将它们留在那里)。

代码语言:javascript
复制
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);
  }
}
EN

回答 1

Stack Overflow用户

发布于 2016-09-18 18:08:55

不知道这是否有帮助。但是,你有没有尝试过谷歌工作表上的appendRow() method?您可以将数组操作为所需的项目格式,然后循环将其追加到工作表中的下一个空行中。

在过去,我遍历数组试图找出位置,但后来开始使用appendRow()方法,它使我的工作变得更容易。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39553472

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档