google-apps-script - 如何使用工作表名称作为条件将数据从一个 Google 工作表复制到同一文件中的另一个工作表并根据过滤条件查找工作表
问题描述
我正在尝试使用工作表名称过滤数据,然后将该过滤器数据复制到我用作过滤名称的工作表中。我想从“Hirtory1”列中过滤数据 I. 这个想法是因为在“history1”选项卡之后给出的每个选项卡名称都应该用作过滤条件。根据选项卡名称过滤数据后,应将数据复制到下一个空白行并自动逐个自动转到该特定工作表。我正在尝试使用以下宏,但它无法正常工作。
function CopyDAta() {
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.getRange('A:I').activate();
spreadsheet.setCurrentCell(spreadsheet.getRange('I1'));
spreadsheet.getRange('A:I').createFilter();
spreadsheet.getRange('I1').activate();
var criteria = SpreadsheetApp.newFilterCriteria().whenTextContains(sheetName())
spreadsheet.getActiveSheet().getFilter().setColumnFilterCriteria(9, criteria);
spreadsheet.setActiveSheet(spreadsheet.getSheetByName('FTM'), true);
spreadsheet.getRange('A2').activate();
spreadsheet.getCurrentCell().getNextDataCell(SpreadsheetApp.Direction.DOWN).activate();
spreadsheet.getRange().copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
};
这是 Google 工作表的链接。 谷歌表链接
一步一步的想法如下。
我上面的代码只适用于一个标签。我想要一种单击并将数据发送到所有选项卡的方式。我应用的过滤器基于选项卡名称。如果您看到过滤条件“FTM”也与选项卡名称“FTM”相同。因此,代码将首先过滤“历史记录”选项卡中的“FTM”,然后搜索“FTM”选项卡在整个 Google 表格中的位置,并将数据粘贴到下一个空行中。同样,每个选项卡都将根据其名称过滤条件从 history1 工作表中获取数据,并将其填充到相关工作表中。我的代码正在运行,但它不会搜索工作表并且不会自动粘贴。我想自动化它,但不知道如何?
请指导我接下来需要做什么。谢谢
解决方案
PL。试试这个代码
function split_history(){
var ss=SpreadsheetApp.getActive();
var hissht=ss.getSheetByName("History1");
var hisvals=hissht.getDataRange().getValues();
var sheets=ss.getSheets();
for (i=0;i<sheets.length;i++){
//
}
var xrp=[];
var bnb=[];
for (j=1;j<hisvals.length;j++){
if (hisvals[j][8]=="XRP"){
xrp.push([hisvals[j][0],hisvals[j][1],hisvals[j][2],hisvals[j][3]]) ; //modify it as per your need
}
if (hisvals[j][8]=="BNB"){
bnb.push([hisvals[j][0],hisvals[j][1],hisvals[j][2],hisvals[j][3]])
}
//add all sections here
}
var xrpsht=ss.getSheetByName("XRP");
var xrplr=xrpsht.getLastRow();
xrpsht.getRange(xrplr+1,1,xrp.length,4).setValues(xrp); //i have used only 4 columns A,B,C,D - you can modify it
var bnbsht=ss.getSheetByName("BNB");
var bnblr=bnbsht.getLastRow();
bnbsht.getRange(bnblr+1,1,bnb.length,4).setValue(bnb);
//add other sections as per your need
}
````
推荐阅读
- c# - 模型未绑定查询参数.Net Core 3.0 HTTP GET中的所有属性
- powershell - Exchange 2016 的未读电子邮件
- wordpress - 导出 woocommerce 客户电子邮件
- ruby-on-rails - Rails 授权 CanCanCan
- postgresql - 在 Gitlab CI 中部署 helm 图表时如何修复节点主机名过长
- java - 并行流中的异常细节不一致
- amazon-web-services - 推荐自定义 EC2 调度的方法?
- database - 如何在 WinForms VB.Net 遗留代码应用程序中对更新数据库的私有方法进行单元测试,而不实际更新数据库?
- openshift - 在 openshift 中执行 kompose 最后会抛出 Unauthorized
- oracle-data-integrator - ODI 12c 使用 SDK 智能导入到 Exec 存储库的行为类似于导入到开发存储库