尝试通过打开的工作表循环 setFormula()
Trying to loop setFormula() through open sheets
我正在使用一个附加组件 (toTabs),它根据 H 列中的值分隔 sheet 数据。它为 [=] 中的每个唯一值生成一个新的 sheet 18=],然后在每个 sheet 的单元格 A2 中放置一个 filter()。这非常有效,除了我的下一步是将每个 sheet 导出到 .csv,我需要在这样做之前摆脱 H:H。
我正在尝试编写一个脚本,将每个过滤器从 A2:H 更改为 A2:G 并忽略公式的其余部分,或者将过滤器搜索的文本替换为 sheet 名称,然后循环遍历每个 sheet,特定的 sheet 除外。我觉得我已经完成了 95%,但循环运行不正常。这是我目前所拥有的:
function Loop() {
var ss = SpreadsheetApp.getActive();
var allsheets = ss.getSheets();
// Array holding the names of the sheets to exclude from the execution
var exclude = ["Raw Input","Remove Chuff","Filtered Input","Final Input","Data Values","blank","totabs"];
for(var s in allsheets){
var sheet = allsheets[s];
// Stop iteration execution if the condition is meet.
if(exclude.indexOf(sheet.getName())==-1) continue;
var cell = s.getRange("A2");
cell.setFormula('=Filter(\'Data Values\'!A2:G,\'Data Values\'!H2:H="'+ SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getName() + '")');
s.getRange('H:H').activate();
s.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
s.getRange('F:F').activate();
s.getActiveRangeList().setNumberFormat('00000');
}
}
Here's 隐藏所有不相关选项卡的文件副本。欢迎任何帮助。
试试这个:
function Loop() {
var ss=SpreadsheetApp.getActive();
var allsheets = ss.getSheets();
var exclude = ["Raw Input","Remove Chuff","Filtered Input","Final Input","Data Values","blank","totabs"];
for(var i=0;i<allsheets.length;i++){
var sheet = allsheets[i];
if(exclude.indexOf(sheet.getName())!=-1) continue;
sheet.getRange("A2").setFormula('=Filter(\'Data Values\'!A2:G,\'Data Values\'!H2:H="'+ sheet.getName() + '")');
sheet.getRange(1,8,sheet.getLastRow(),1).clear({contentsOnly: true, skipFilteredRows: true});
sheet.getRange(1,6,sheet.getLastRow(),1).setNumberFormat('00000');
}
}
我正在使用一个附加组件 (toTabs),它根据 H 列中的值分隔 sheet 数据。它为 [=] 中的每个唯一值生成一个新的 sheet 18=],然后在每个 sheet 的单元格 A2 中放置一个 filter()。这非常有效,除了我的下一步是将每个 sheet 导出到 .csv,我需要在这样做之前摆脱 H:H。
我正在尝试编写一个脚本,将每个过滤器从 A2:H 更改为 A2:G 并忽略公式的其余部分,或者将过滤器搜索的文本替换为 sheet 名称,然后循环遍历每个 sheet,特定的 sheet 除外。我觉得我已经完成了 95%,但循环运行不正常。这是我目前所拥有的:
function Loop() {
var ss = SpreadsheetApp.getActive();
var allsheets = ss.getSheets();
// Array holding the names of the sheets to exclude from the execution
var exclude = ["Raw Input","Remove Chuff","Filtered Input","Final Input","Data Values","blank","totabs"];
for(var s in allsheets){
var sheet = allsheets[s];
// Stop iteration execution if the condition is meet.
if(exclude.indexOf(sheet.getName())==-1) continue;
var cell = s.getRange("A2");
cell.setFormula('=Filter(\'Data Values\'!A2:G,\'Data Values\'!H2:H="'+ SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getName() + '")');
s.getRange('H:H').activate();
s.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
s.getRange('F:F').activate();
s.getActiveRangeList().setNumberFormat('00000');
}
}
Here's 隐藏所有不相关选项卡的文件副本。欢迎任何帮助。
试试这个:
function Loop() {
var ss=SpreadsheetApp.getActive();
var allsheets = ss.getSheets();
var exclude = ["Raw Input","Remove Chuff","Filtered Input","Final Input","Data Values","blank","totabs"];
for(var i=0;i<allsheets.length;i++){
var sheet = allsheets[i];
if(exclude.indexOf(sheet.getName())!=-1) continue;
sheet.getRange("A2").setFormula('=Filter(\'Data Values\'!A2:G,\'Data Values\'!H2:H="'+ sheet.getName() + '")');
sheet.getRange(1,8,sheet.getLastRow(),1).clear({contentsOnly: true, skipFilteredRows: true});
sheet.getRange(1,6,sheet.getLastRow(),1).setNumberFormat('00000');
}
}