Google Script - arrayofarrays - 不正确的范围宽度

时间:2016-09-18 02:26:24

标签: google-apps-script

我有一个谷歌脚本导入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);
  }
}

1 个答案:

答案 0 :(得分:1)

不知道这是否有用。但是,您是否尝试过appendRow() method Google表格?您可以将数组操作为所需的项目格式,然后循环遍历到工作表中的下一个空行。

在过去,我通过数组试图找出位置,然后开始使用appendRow()方法,这让我更容易。