Google apps script 有没有一种干净的方法可以将稀疏网格写入GoogleSheets范围
我正在使用Google sheets存储从web应用程序更新的数据 我使用工作表的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
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 );