有没有一种干净的方法可以将稀疏网格写入 google 工作表范围

Is there a clean way to write a sparse grid to a google sheets range

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

我在 sheet 的 getDataRange() 上使用 getValues() 检索所有数据,如下所示:

    // 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()

将新扩展的网格写回sheet
    // get the range to be updated and set values from the grid
    var newDataRange = shtData.getRange(1, 1, rows + 1, cols);
    newDataRange.setValues( dataGrid );

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

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

因为 @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()