Google 将数据从一个 sheet 传输到另一个的脚本
Google Script to transfer Data from one sheet to another
我希望有人能帮我写一个 Google 脚本,用于 Google 表格(除非它可以用标准公式字符串完成)。
我想要一个脚本来在 "Sheet1" 的指定列中搜索特定的 "text value",如果找到 "text value",则传输来自 "Row" 的数据到第一个可用的 empty 行中的 "Sheet2"。然后,数据传输到 "Sheet2" 后,删除来自 "Sheet1" 的数据行。
*注意,"Sheet2" 比 "Sheet1" 少 Headers。我只想要 "sheet1" 中与 "sheet2" 具有相同 Headers 的数据
这是一个示例工作簿。Data Transfer 如果 F 列中的 "text" 是 "lost",则将该行的数据传输到 "sheet2",但只有与 headers 相关的数据 "sheet2".
我是脚本和 VBA 的新手,如果有人愿意提供任何帮助,我将不胜感激。
非常感谢您!
-杰西
查找、移动和删除
txt
是要搜索的文本
col
是要搜索的列名
function findMoveDelete(txt,col) {
var txt=txt||'Hoover';//search text
var col=col||'Location';//column name
var ss=SpreadsheetApp.getActive();
var sh=ss.getSheetByName('Sheet1');
var dsh=ss.getSheetByName('Sheet2');
var dHdrToIdx={dhA:[]};
dHdrToIdx.dhA=dsh.getRange(1,1,1,dsh.getLastColumn()).getValues()[0];
dHdrToIdx.dhA.forEach(function(hdr,i){dHdrToIdx[hdr]=i;});
var rg=sh.getRange(2,1,sh.getLastRow()-1,sh.getLastColumn());
var sHdrToIdx={shA:[]};
sHdrToIdx.shA=sh.getRange(1,1,1,sh.getLastColumn()).getValues()[0];
sHdrToIdx.shA.forEach(function(hdr,i){sHdrToIdx[hdr]=i;});
var vA=rg.getValues();
var d=0;
for(var i=0;i<vA.length;i++) {
//Find
if(vA[i][sHdrToIdx[col]]==txt) {
var row=[];
dHdrToIdx.dhA.forEach(function(dhdr,j){
row.push(vA[i][sHdrToIdx[dHdrToIdx.dhA[j]]]);
});
dsh.appendRow(row);//Move
sh.deleteRow(i+2-d++);//Delete
}
}
}
第 1 和第 2 页在 运行 之后:
sheet1 和 sheet2 中的 headers 必须相同。您可以按您喜欢的任何顺序放置它们,但它们在两张纸中的顺序必须相同。
我希望有人能帮我写一个 Google 脚本,用于 Google 表格(除非它可以用标准公式字符串完成)。
我想要一个脚本来在 "Sheet1" 的指定列中搜索特定的 "text value",如果找到 "text value",则传输来自 "Row" 的数据到第一个可用的 empty 行中的 "Sheet2"。然后,数据传输到 "Sheet2" 后,删除来自 "Sheet1" 的数据行。
*注意,"Sheet2" 比 "Sheet1" 少 Headers。我只想要 "sheet1" 中与 "sheet2" 具有相同 Headers 的数据 这是一个示例工作簿。Data Transfer 如果 F 列中的 "text" 是 "lost",则将该行的数据传输到 "sheet2",但只有与 headers 相关的数据 "sheet2".
我是脚本和 VBA 的新手,如果有人愿意提供任何帮助,我将不胜感激。
非常感谢您!
-杰西
查找、移动和删除
txt
是要搜索的文本
col
是要搜索的列名
function findMoveDelete(txt,col) {
var txt=txt||'Hoover';//search text
var col=col||'Location';//column name
var ss=SpreadsheetApp.getActive();
var sh=ss.getSheetByName('Sheet1');
var dsh=ss.getSheetByName('Sheet2');
var dHdrToIdx={dhA:[]};
dHdrToIdx.dhA=dsh.getRange(1,1,1,dsh.getLastColumn()).getValues()[0];
dHdrToIdx.dhA.forEach(function(hdr,i){dHdrToIdx[hdr]=i;});
var rg=sh.getRange(2,1,sh.getLastRow()-1,sh.getLastColumn());
var sHdrToIdx={shA:[]};
sHdrToIdx.shA=sh.getRange(1,1,1,sh.getLastColumn()).getValues()[0];
sHdrToIdx.shA.forEach(function(hdr,i){sHdrToIdx[hdr]=i;});
var vA=rg.getValues();
var d=0;
for(var i=0;i<vA.length;i++) {
//Find
if(vA[i][sHdrToIdx[col]]==txt) {
var row=[];
dHdrToIdx.dhA.forEach(function(dhdr,j){
row.push(vA[i][sHdrToIdx[dHdrToIdx.dhA[j]]]);
});
dsh.appendRow(row);//Move
sh.deleteRow(i+2-d++);//Delete
}
}
}
第 1 和第 2 页在 运行 之后:
sheet1 和 sheet2 中的 headers 必须相同。您可以按您喜欢的任何顺序放置它们,但它们在两张纸中的顺序必须相同。