有没有一种干净的方法来将稀疏网格写入Google表格范围

时间:2018-10-28 16:43:12

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

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

我通过使用工作表getValues()上的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”填充,而不是空白:

Undefined grid locations are filled with NOT_FOUND

写回工作表时,是否有某种方法可以使这些未定义的值成为空单元格?我试图避免使用零长度字符串填充所有未定义网格位置的循环。

1 个答案:

答案 0 :(得分:1)

@I'-'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 );

您可以去看看this post

参考

array.forEach()