我有一个像这样的谷歌表格
列数和行数可能不同(不是静态的)。我希望我的 google 脚本查找最后一行和最后一列,然后运行 for 循环并将每行的数据组合成这样的 json 格式。
[["1","Lee","Blue","Active"],["2","Mike","Green","Disabled"],["3","Chan","Yellow","Active"]]
我了解了 JSON.stringify() 函数,它可以帮助我将数据或每行组合成 json 格式,但我希望每行数据用逗号 (,) 分隔,不知道如何将其添加到逻辑,因为我不想在最后一行后添加逗号。
我尝试创建此代码,并需要逻辑方面的帮助,以根据列数和行数动态运行循环,而不是对任何范围进行硬编码并添加逗号。
var mysheet = SpreadsheetApp.getActive().getSheetByName('mysheet');
function combine_val() {
GetRowsCount();
var startRow = 2; // First row of data to process
var numRows = LastAudienceRow; // Number of rows to process
for (var i = 0; i < numRows; ++i) {
var dataRange = mysheet.getRange(startRow, 1, 1, 4);
var data = dataRange.getValues();
startRow = startRow+1;
var data2= JSON.stringify(data);
}
SpreadsheetApp.getUi().alert(data2);
}
function GetRowsCount() {
LastAudienceRow = mysheet.getLastRow() - 1;
return LastAudienceRow;
}
最佳答案
你把整个情况搞得太复杂了,因为其中大部分都是自动完成的。该脚本也不是很高效,当您添加更多运行时,执行时间会太长,最终会达到应用程序脚本的最大执行时间限制。
在这里,您尝试分别从每一行获取数据,并将其添加到数组中。这是非常低效的,并且只指定您想要的数据范围会更好/更快。令人高兴的是,这也将其格式化为您喜欢的格式。
这是一个示例脚本:
var mysheet = SpreadsheetApp.getActive().getSheetByName('mysheet');
function combine_val() {
var startRow = 1; // First row of data to process.
var startColumn = 1; //First Column to process, in case that changes.
var numRows = mysheet.getLastRow(); // Number of rows to process
var numCols = mysheet.getLastColumn(); //Also the number of columns to process, again in case that changes.
var dataRange = mysheet.getRange(startRow, startColumn, numRows, numCols);//Get the full range of data in the sheet dynamically.
var data = JSON.stringify(dataRange.getValues());//Get the value of the range, AND convert it to a JSON string in one line.
Logger.log(data); //Use the in built logger to read the values that are returned. You can read this by pressing 'ctrl+enter'.
}
我还添加了一些示例动态改进,这意味着您将更少的值硬编码到脚本中,以防止数据发生变化时破坏脚本。
此外,我还添加了一个示例,说明如何通过内置日志记录工具读取数据,而不是在每次运行后通过繁琐的弹出窗口读取数据。
关于javascript - 如何将行范围合并为 json 格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57812346/