首页 > 解决方案 > 有没有一种干净的方法可以将稀疏网格写入谷歌表格范围

问题描述

我正在使用 Google 表格来存储从网络应用程序更新的数据。

getValues()我使用工作表上的on检索所有数据getDataRange(),如下所示:

    // get reference to the data sheet
    var ss = _getPOMasterSpreadsheet();
    var shtData = ss.getSheetByName( "TestSheet11" );

    // obtain the grid
    var dataRange = shtData.getDataRange();
    var dataGrid = dataRange.getValues();

    var cols = dataGrid[0].length;
    var rows = dataGrid.length;

有时我通过添加新行来扩展数据,但并非行中的每一列都包含数据,例如:

    // create a new row and add it to the grid
    var newRow = new Array( cols );
    dataGrid.push( newRow );

    // write a value to the last cell of the new row
    newRow[ newRow.length-1 ] = "NEW LAST CELL" ;

然后使用新扩展的网格将其写回工作表setValues()

    // get the range to be updated and set values from the grid
    var newDataRange = shtData.getRange(1, 1, rows + 1, cols);
    newDataRange.setValues( dataGrid );

这意味着网格的某些部分没有价值。当网格写入工作表时,对应于未定义值的单元格将填充文本“NOT_FOUND”而不是空白:

未定义的网格位置用 NOT_FOUND 填充

在写回工作表时,有什么方法可以让这些未定义的值成为空单元格?我试图避免有一个循环来用零长度字符串填充所有未定义的网格位置。

标签: google-apps-scriptgoogle-sheets-macros

解决方案


正如 @I'-'我告诉我fill在应用脚本中不可用。

您仍然可以在客户端使用它,所以您应该在这里写:

newRow.fill(""); // or 0

forEach就是这种情况如果您在服务器端编码,除了使用函数之外,我没有看到任何其他解决方案:

   var newRow = new Array( cols );
   newRow.forEach(function(element, index)
   {
     newRow[index] = ""; // or 0
   });
   newRow[ newRow.length - 1] = "NEW LAST CELL" ;
   dataGrid.push( newRow );

你可以去看看这个帖子

参考

数组.forEach()


推荐阅读