google-apps-script - 谷歌脚本将数据从一张表传输到另一张表
问题描述
我希望有人能帮助我编写一个用于 Google 表格的 Google 脚本(除非它可以使用标准公式字符串来完成)。
我想要一个脚本来在“Sheet1”的指定列中搜索特定的“文本值”,如果找到“文本值”,则该“行”中的数据将传输到第一个可用空行中的“Sheet2”。然后,将数据传输到“Sheet2”后,删除“Sheet1”中包含数据的行。
*注意,“Sheet2”的标题比“Sheet1”少。我只想要“sheet1”中与“sheet2”具有相同标题的数据 这是一个示例工作簿。数据传输如果 F 列中的“文本”“丢失”,则将该行中的数据传输到“sheet2”,但仅传输与“sheet2”中的标题相关的数据。
我是 Scripts 和 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 中具有相同的标题。您可以按照您喜欢的任何顺序放置它们,但它们在两张纸中必须相同。
推荐阅读
- python - 在 Python3 中将列表作为参数传递是如何工作的?
- java - SpringBoot 单元测试 - 未调用服务方法
- amazon-web-services - 用于图像/视频或服务器的 Amazon S3
- python - 这是什么时间戳?错误的转换
- python - 将 16 位 numpy 数组保存为 16 位 PNG 图像
- java - 记录器正在读取配置,但仅显示错误日志
- angular - 如何以角度隐藏数据列表中的[值]?
- javascript - position: "absolute" with Button 不适用于 IOS | 反应原生
- azure - Azure 消费使用 API - 筛选器不起作用
- mysql - 我怎样才能加入4张桌子?