Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 有没有一种干净的方法可以将稀疏网格写入GoogleSheets范围_Google Apps Script_Google Sheets Macros - Fatal编程技术网

Google apps script 有没有一种干净的方法可以将稀疏网格写入GoogleSheets范围

Google apps script 有没有一种干净的方法可以将稀疏网格写入GoogleSheets范围,google-apps-script,google-sheets-macros,Google Apps Script,Google Sheets Macros,我正在使用Google sheets存储从web应用程序更新的数据 我使用工作表的getDataRange()上的getValues()检索所有数据,如下所示: // get reference to the data sheet var ss = _getPOMasterSpreadsheet(); var shtData = ss.getSheetByName( "TestSheet11" ); // obtain the grid var data

我正在使用Google sheets存储从web应用程序更新的数据

我使用工作表的
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()

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

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

正如我所说的
fill
在应用程序脚本中不可用

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

newRow.fill(“”;//或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 );
你可以去看看

参考资料


单元格中如何填写“未找到”??通常单元格应该是空的。当您使用range.setValues(grid)时,其中grid是数组的二维数组,然后在有未定义的网格元素的地方,setValues函数会自动用字符串“NOT_FOUND”填充工作表单元格。well从未遇到过这个问题,有没有关于beahaviour的文档?@JSmith在Google应用程序脚本文档中没有提到如果没有定义网格元素会发生什么。这似乎是一个未记录的功能。好吧,刚才添加了一个答案,这是我看到的唯一方式。对不起,谢谢@JSmith我正要重新编码以使用fill,这时我看到你关于fill不可用的评论。AFAIK我所有的脚本都是在服务器上运行的,而不是在客户机上运行的-我不知道在工作表中有任何可用的客户机端脚本。无论如何,我将不得不使用冗长的方法。非常感谢您的帮助-非常感谢。@JohnRC欢迎您!如果您在Web应用程序中使用html,您可以轻松地通过数据客户端进行解析,然后使用
google.script.run.myFunction(datas)
@JohnRC将它们发送回服务器。我在帖子中添加了一个编辑。请告诉我它是否对你有用。最好的!在重新编辑时,我遇到的问题是创建包含未定义单元格的新行,并使用
setValues()
将值设置回工作表中。这时“未找到”文本出现。@JohnRC哦,你说得对,对不起,我没有解决基本问题。我会更正我的答案
   var newRow = new Array( cols );
   newRow.forEach(function(element, index)
   {
     newRow[index] = ""; // or 0
   });
   newRow[ newRow.length - 1] = "NEW LAST CELL" ;
   dataGrid.push( newRow );