Javascript 忽略Google应用程序脚本中循环中的空行
我不熟悉Javascript 忽略Google应用程序脚本中循环中的空行,javascript,arrays,google-apps-script,Javascript,Arrays,Google Apps Script,我不熟悉googleapps脚本,我试图忽略for循环中的空行,但我仍然在日志中获取空行。这是我的密码 function getNonEmptyRows() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet1 = ss.getSheetByName("Bldng4"); var lr = sheet1.getLastRow() - 17; for (var i = 1; i < lr;
googleapps脚本
,我试图忽略for循环中的空行,但我仍然在日志
中获取空行。这是我的密码
function getNonEmptyRows() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet1 = ss.getSheetByName("Bldng4");
var lr = sheet1.getLastRow() - 17;
for (var i = 1; i < lr; i++) {
var singleRow = sheet1.getRange(i, 1, 1, sheet1.getLastColumn()).getValues();
if (singleRow.length > 0) {
Logger.log(singleRow);
}
}
}
函数getNonEmptyRows(){
var ss=SpreadsheetApp.getActiveSpreadsheet();
var sheet1=ss.getSheetByName(“Bldng4”);
var lr=sheet1.getLastRow()-17;
对于(变量i=1;igetValues()
方法总是返回二维数组,无论单元格的内容是什么。有几种方法可以获取单元格内容,其中之一是将范围内容字符串化(将矩阵转换为单个字符串),删除逗号(以及最终的“不可见”空格),并检查结果字符串的长度
替换代码可以如下所示:
var singleRow = sheet1.getRange(i, 1, 1, sheet1.getLastColumn()).getValues().toString().replace(',','').replace(' ','');
也就是说,这段代码效率非常低,因为它在每次循环迭代中都使用SpreadSheetApp服务,这一过程特别慢。
您可以在有关的文档中找到更好的方法。我正在寻找类似问题的解决方案,以下是我所做的: 首先,我发现了如何创建GoogleApps脚本以消除重复行。 接下来,我对其进行如下修改以消除空行:
function removeEmptyRows() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("settings");
var data = sheet.getRange("A2:D").getValues();
var newData = new Array();
for(i in data){
var row = data[i];
var empty = false;
for(i in data){
if(row.toString() == ",,,"){
empty = true;
}
}
if(!empty){
newData.push(row);
}
sheet.getRange(2, 6, newData.length, newData[0].length).setValues(newData);
};
如您所见,它采用A2:D范围,删除空行,然后将没有空行的过滤数据粘贴到范围F2:I中。
您可以尝试使用此脚本,但可能需要将其调整为数组的“宽度”。为此,请更改以下字符串中的逗号数:
if(row.toString() == ",,,"){
编辑:
我稍微修改了脚本以自动调整数组的宽度:
function removeEmptyRows() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("settings");
var range = sheet.getRange("A2:C");
var data = range.getValues();
var dataWidth = range.getWidth();
var newData = new Array();
if (dataWidth<=1) {
var stringToCompare = '';
}else{
var stringToCompare = ',';
for (var i=0;i<dataWidth-2;i++) stringToCompare+=","
};
for(i in data){
var row = data[i];
var empty = false;
for(i in data){
if(row.toString() == stringToCompare){
empty = true;
}
}
if(!empty){
newData.push(row);
}
}
sheet.getRange(2, 6, newData.length, newData[0].length).setValues(newData);
};
函数removemptyrows(){
var sheet=SpreadsheetApp.getActiveSpreadsheet().getSheetByName(“设置”);
var范围=sheet.getRange(“A2:C”);
var data=range.getValues();
var dataWidth=range.getWidth();
var newData=newarray();
if(dataWidthHi)。这个答案可能是正确的,但最好解释一下代码的作用。
var range_data = sheet1.getRange("A2:A").getValues().filter(function(array){
return array != ''
})