在本例中,我有一组来自Google工作表(4Cat)的数据,这些数据输入到运行Google脚本的另一个工作表(ImportFeeder)中。
在下面的脚本末尾,如何插入一个过滤器脚本来按K行对数据进行排序?(仅显示iPad产品)
function myFunction() {
var sss = SpreadsheetApp.openById('1kL96dRm3Z8XBtMXnSzUARxR1b34-njlkZQ1sU0c3g1s'); //replace with source ID
var ss = sss.getSheetByName('4cat'); //replace with source Sheet tab name
var range = ss.getRange('A:I'); //assign the range you want to copy
var data = range.getValues();
var tss = SpreadsheetApp.openById('1u7547KaniKHLUJn2v-ezN4l8ZcxE4viCFcoxsA904MI'); //replace with destination ID
var ts = tss.getSheetByName('Sheet1'); //replace with destination Sheet tab name
ts.getRange(ts.getLastRow()+1, 1, data.length, data[0].length).setValues(data);
var range = ts.getRange(ts.getLastRow()+1, 1, data.length, data[0].length)
var rawData = range.getValues() // get value from spreadsheet 2
var data = [] // Filtered Data will be stored in this array
for (var i = 0; i< rawData.length ; i++){
if(rawData[i][10] == "iPad") // Check to see if column K says ipad if not skip it
{
data.push(rawData[i])
}
}
}
(无法从未定义中读取属性长度)
4Cat样本数据https://docs.google.com/spreadsheets/d/1kL96dRm3Z8XBtMXnSzUARxR1b34-njlkZQ1sU0c3g1s/edit?usp=sharing */
喂入
重要馈线https://docs.google.com/spreadsheets/d/1u7547KaniKHLUJn2v-ezN4l8ZcxE4viCFcoxsA904MI/edit?usp=sharing
必需-成功导入工作表到工作表,在Google脚本中按K行过滤数据。在脚本顶部添加一个clear()sheet函数,因为它将每天运行,并且在每天导入之前需要清除工作表。
你可以在这里找到排序的留档。要排序,请使用getRange选择一个范围,然后像这样排序函数
var range = ts.getRange(ts.getLastRow()+1, 1, data.length, data[0].length)
// Use the below line instead, if you want to sort whole sheet, not just the newly entered data!
// var range = ts.getDataRange()
range.sort(11) // sort based on column number 11
编辑1:若要根据要复制到新工作表中的列仅筛选值,则需要修剪从包含所有不需要的值的工作表中获取的数据。
var rawData = range.getValues() // get value from spreadsheet1
var data = [] // Filtered Data will be stored in this array
for (var i = 0; i< rawData.length ; i++){
if(rawData[i][10] == "iPAD") // Check to see if column K says ipad if not skip it
{
data.push(rawData[i])
}
}
// Now you can paste array data to your new spreadsheet like before.
编辑2:这是最终代码的样子,
function myFunction() {
var sss = SpreadsheetApp.openById('1kL96dRm3Z8XBtMXnSzUARxR1b34-njlkZQ1sU0c3g1s'); //replace with source ID
var ss = sss.getSheetByName('4cat'); //replace with source Sheet tab name
var range = ss.getRange('A:V'); //assign the range you want to copy
var rawData = range.getValues() // get value from spreadsheet 1
var data = [] // Filtered Data will be stored in this array
for (var i = 0; i< rawData.length ; i++){
if(rawData[i][10] == "iPad") // Check to see if column K says ipad if not skip it
{
data.push(rawData[i])
}
}
var tss = SpreadsheetApp.openById('1u7547KaniKHLUJn2v-ezN4l8ZcxE4viCFcoxsA904MI'); //replace with destination ID
var ts = tss.getSheetByName('Sheet1'); //replace with destination Sheet tab name
ts.getRange(ts.getLastRow()+1, 1, data.length, data[0].length).setValues(data);
}
您可以将其添加到原始代码中:
filterByText(rawData, 10, iPad);
只要在myFunction之后添加此函数,它就会起作用:
function filterByText(data, columnIndex, values) {
var value = values;
if (data.length > 0) {
if (typeof columnIndex != "number" || columnIndex > data[0].length) {
throw "Please, can you choose a valid column index?";
}
var r = [];
if (typeof value == "string") {
var reg = new RegExp(escape(value).toUpperCase());
for (var i = 0; i < data.length; i++) {
if (columnIndex < 0 && escape(data[i].toString()).toUpperCase().search(reg) != -1 || columnIndex >= 0 && escape(data[i][columnIndex].toString()).toUpperCase().search(reg) != -1) {
r.push(data[i]);
}
}
return r;
} else {
for (var i = 0; i < data.length; i++) {
for (var j = 0; j < value.length; j++) {
var reg = new RegExp(escape(value[j]).toUpperCase());
if (columnIndex < 0 && escape(data[i].toString()).toUpperCase().search(reg) != -1 || columnIndex >= 0 && escape(data[i][columnIndex].toString()).toUpperCase().search(reg) != -1) {
r.push(data[i]);
j = value.length;
}
}
}
return r;
}
} else {
return data;
}
}
上面是GoogleApps脚本的ArrayLib库filterByText方法使用的代码。我真的只是复制了它,使投掷更加友好。
您的完整代码可能如下所示:
function myFunction() {
var sss = SpreadsheetApp.openById('1kL96dRm3Z8XBtMXnSzUARxR1b34-njlkZQ1sU0c3g1s'); //replace with source ID
var ss = sss.getSheetByName('4cat'); //replace with source Sheet tab name
var range = ss.getRange('A:I'); //assign the range you want to copy
var data = range.getValues();
var tss = SpreadsheetApp.openById('1u7547KaniKHLUJn2v-ezN4l8ZcxE4viCFcoxsA904MI'); //replace with destination ID
var ts = tss.getSheetByName('Sheet1'); //replace with destination Sheet tab name
ts.getRange(ts.getLastRow()+1, 1, data.length, data[0].length).setValues(data);
var range = ts.getRange(ts.getLastRow()+1, 1, data.length, data[0].length)
var rawData = range.getValues() // get value from spreadsheet 2
var data = filterByText(rawData, 10, iPad); // rawData is now sorted.
range.clear();
var powerRange = ts.getRange(ts.getLastRow()+1, 1, data.length, data[0].length);
powerRange.setValues(data);
}
function filterByText(data, columnIndex, values) {
var value = values;
if (data.length > 0) {
if (typeof columnIndex != "number" || columnIndex > data[0].length) {
throw "Please, can you choose a valid column index?";
}
var r = [];
if (typeof value == "string") {
var reg = new RegExp(escape(value).toUpperCase());
for (var i = 0; i < data.length; i++) {
if (columnIndex < 0 && escape(data[i].toString()).toUpperCase().search(reg) != -1 || columnIndex >= 0 && escape(data[i][columnIndex].toString()).toUpperCase().search(reg) != -1) {
r.push(data[i]);
}
}
return r;
} else {
for (var i = 0; i < data.length; i++) {
for (var j = 0; j < value.length; j++) {
var reg = new RegExp(escape(value[j]).toUpperCase());
if (columnIndex < 0 && escape(data[i].toString()).toUpperCase().search(reg) != -1 || columnIndex >= 0 && escape(data[i][columnIndex].toString()).toUpperCase().search(reg) != -1) {
r.push(data[i]);
j = value.length;
}
}
}
return r;
}
} else {
return data;
}
}
为什么不使用自定义筛选函数?添加了一个。toLowerCase()
匹配“ipad”,不区分大小写。
function myFunction() {
var sss = SpreadsheetApp.openById('1kL96dRm3Z8XBtMXnSzUARxR1b34-njlkZQ1sU0c3g1s'); //replace with source ID
var ss = sss.getSheetByName('4cat'); //replace with source Sheet tab name
var range = ss.getRange('A:V'); //assign the range you want to copy
var rawData = range.getValues() // get value from spreadsheet 1
var data = rawData.filter(isColKiPad); // Filtered Data will be stored in this array
var tss = SpreadsheetApp.openById('1u7547KaniKHLUJn2v-ezN4l8ZcxE4viCFcoxsA904MI'); //replace with destination ID
var ts = tss.getSheetByName('Sheet1'); //replace with destination Sheet tab name
ts.getRange(2,1,ts.getLastRow() - 1,ts.getLastColumn()).clear(); // Assuming header is in the first row, clears sheet but header
ts.getRange(2, 1, data.length, data[0].length).setValues(data);
};
// Change both to ts.getRange(1,1,[...] if there's no header row
function isColKiPad(arr) {
return arr[10].toLowerCase() == "ipad";
};
你是否考虑过使用电子表格公式?您可以尝试组合使用=IMPORTRANGE(电子表格\u键,字符串\u范围)
和QUERY(数据,查询,[header])
导入已筛选的范围:
=QUERY(IMPORTRANGE("1kL96dRm3Z8XBtMXnSzUARxR1b34-njlkZQ1sU0c3g1s";"4cat!A:V");"SELECT * WHERE Col11 = 'iPad'")
你甚至不需要这样清理你的床单。
脚本编辑器让你创建和编辑脚本,准备和运行已选择的脚本。拖放或双击右侧的“标识符”窗格的一个标识符来将它添加到编辑器中。 【提示】当你使用查找创建工具或聚合创建工具创建查询时,脚本将会在脚本编辑器中自动生成。 Navicat 提供广泛的高级功能,例如:编辑代码功能、智能自动完成代码、设置脚本格式及更多。 设置脚本格式 若要更改脚本格式,简单地从“格式”菜单选择 - 缩进 为已选择的代码行增加或减少缩
脚本编辑器让你创建和编辑脚本,准备和运行已选择的脚本。拖放或双击右侧的“标识符”窗格的一个标识符来将它添加到编辑器中。 【提示】当你使用查找创建工具或聚合创建工具创建查询时,脚本将会在脚本编辑器中自动生成。 Navicat 提供广泛的高级功能,例如:编辑代码功能、智能自动完成代码、设置脚本格式及更多。 设置脚本格式 若要更改脚本格式,简单地从“格式”菜单选择 - 缩进 为已选择的代码行增加或减少缩
脚本编辑器让你创建和编辑脚本,准备和运行已选择的脚本。拖放或双击右侧的“标识符”窗格的一个标识符来将它添加到编辑器中。 【提示】当你使用查找创建工具或聚合创建工具创建查询时,脚本将会在脚本编辑器中自动生成。 Navicat 提供广泛的高级功能,例如:编辑代码功能、智能自动完成代码、设置脚本格式及更多。 设置脚本格式 若要更改脚本格式,简单地从“格式”菜单选择 - 缩进 为已选择的代码行增加或减少缩
问题内容: 我是ES中的新手,我想使用脚本过滤器来获得所有匹配,即数组至少具有一个小于max且大于min的元素(max和min是脚本中的param)。 该文件像: 我尝试了脚本,但没有用 没有错误信息,但是搜索结果是错误的,有没有办法迭代数组字段? 谢谢你们。 问题答案: 是的,这是可行的,但是您的脚本没有这样做。尝试改用Groovy的any()方法: 一些东西: 您的脚本只是遍历一个集合并检查条
我希望能够将我的数据输入到Sheet1中,然后查看Sheet2并点击sendEmail按钮。
我正在使用下面的脚本在编辑单元格时将行移动到其他工作表。我还需要将此脚本应用于谷歌表单响应表。我在表单响应表上创建了一个新列,当标记为“是”时,我需要将该行移到工作簿中的另一个工作表中。谷歌表单响应表与普通表单不同吗?该脚本适用于所有其他工作表。