[英]fixing my #ERROR in google sheets with google apps script
I have a google app script program that looks throughout a spreadsheet and moves rows with empty values in column 5 into another sheet (block 3 of code).我有一个谷歌应用程序脚本程序,它查看整个电子表格并将第 5 列中具有空值的行移动到另一个工作表(代码块 3)中。
However, I keep getting a #error
upon transfer because in certain rows, some phone numbers have a + in front of them.但是,我在转移时不断收到
#error
,因为在某些行中,某些电话号码前面有一个 +。 I tried to turn the entire number into a string (block 2 of code with foreach loop), but the error remains.我试图将整个数字变成一个字符串(带有 foreach 循环的代码块 2),但错误仍然存在。
function insertRecord() {
var sheet_2 = SpreadsheetApp.getActiveSpreadsheet().getSheets()[1];
var sheet_1 = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
var rows = sheet_1.getDataRange().getValues();
rows.forEach(function(element) {
iterator=element.length;
for (i=0;i<iterator+1;i++){
if (typeof element[i]=== Number){
element[i]=element[i].toString
}
}
});
rows
.filter(row => row[5] == '')
.map(row_w_empty5col => sheet_2.appendRow(row_w_empty5col));
}
When I saw your script, at for (i=0;i<iterator+1;i++){
, I thought that i<iterator+1
will be i<iterator
.当我在
for (i=0;i<iterator+1;i++){
看到您的脚本时,我认为i<iterator+1
将是i<iterator
。 And, toString
of element[i]=element[i].toString
will be toString()
.而且,
element[i]=element[i].toString
的toString
将是toString()
。 And also, when appendRow
is used in a loop, the process cost will be high.而且,当在循环中使用
appendRow
时,处理成本会很高。 Ref 参考
And, about moves rows with empty values in column 5 into another sheet
, in your script, .filter(row => row[5] == '')
is used.而且,关于
moves rows with empty values in column 5 into another sheet
工作表中,在您的脚本中, .filter(row => row[5] == '')
。 In this case, the column 6 is checked.在这种情况下,第 6 列被选中。 In order to check the column 5 (column "E"), it is
row[4]
.为了检查第 5 列(“E”列),它是
row[4]
。
From your current issue and your goal, in your situation, how about copying the number format?从您当前的问题和目标来看,在您的情况下,复制数字格式如何? When this is reflected in your script, it becomes as follows.
当这反映在您的脚本中时,它变成如下。
function insertRecord() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet_2 = ss.getSheets()[1];
var sheet_1 = ss.getSheets()[0];
var range = sheet_1.getDataRange();
var rows = range.getValues();
var f = range.getNumberFormats();
var n = rows.reduce((ar, r, i) => {
if (r[4].toString() == "") ar.push(i);
return ar;
}, []);
var values = n.map(e => rows[e]);
var formats = n.map(e => f[e]);
sheet_2.getRange(sheet_2.getLastRow() + 1, 1, values.length, values[0].length).setValues(values).setNumberFormats(formats);
}
Update: Changed my code a little bit, and it works now.更新:稍微改变了我的代码,它现在可以工作了。
function emailEditor() {
var app=SpreadsheetApp;
var targetSht=app.getActiveSpreadsheet().getSheetByName('Linkedin Only');
var spreadsheet=app.getActiveSpreadsheet().getSheets().length;
for (i=0;i<spreadsheet;i++){
var shts=app.getActiveSpreadsheet().getSheets()[i];
var originalData=shts.getDataRange().getValues();
var newData=originalData.filter(function(item){
return item[5]===''; //user declared input here
});
var begin=targetSht.getDataRange().getValues().length;
targetSht.getRange(begin+1,1,newData.length,newData[0].length).setValues(newData);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.