当前的脚本代码有错误,请参见视频和代码,并期待结果
预先感谢
答案 0 :(得分:2)
此函数将读取母版标头,并在所有其他工作表上查找那些标头,然后在母版中正确的列下返回。如果找不到特定的标题,它将返回工作表名称,标题名称以及未找到的字符串“ nf”。
它还具有排除您不希望参与该流程的工作表的功能,并且当然可以像您的代码一样,它使用名为“ Master”的工作表作为目的地,因此不会读取主表中的数据,但会读取主表以获取第一行中的列名以在其他表中进行搜索。
我查看了您的代码,弄清楚您在做什么之后,我发现自己完成此操作要容易得多。
代码:
function combineDataForAllSheets() {
var ss=SpreadsheetApp.getActive();
var excl=['Globals','Form Responses 1','Form Responses 2'];
var masterSheet="Master";
for(var i=0;i<excl.length;i++) {ss.getSheetByName(excl[i]).hideSheet()}
var sh=ss.getSheetByName(masterSheet);
var hrg=sh.getRange(1,1,1,sh.getLastColumn());
var mhA=hrg.getValues()[0];
sh.getRange(2,1,sh.getMaxRows()-1,sh.getLastColumn()).clearContent();
var shts=ss.getSheets();
for(var i=0;i<shts.length;i++) {
if(!shts[i].isSheetHidden() && shts[i].getName()!=masterSheet) {
var shx=shts[i];
var name=shx.getName();
var hAx=shx.getRange(1,1,1,shx.getLastColumn()).getValues()[0];
var nr=sh.getLastRow()+1;
for(var ix=0;ix<mhA.length;ix++) {
vAix=[];
var header=mhA[ix];
var index=hAx.indexOf(mhA[ix]);
if(hAx.indexOf(mhA[ix])>-1) {
var vAix=shx.getRange(2,hAx.indexOf(mhA[ix])+1,shx.getLastRow()-1,1).getValues();
}else{
for(var kx=0;kx<shx.getLastRow()-1;kx++) {
vAix.push([shx.getName()+ '-'+ mhA[ix] +'-nf']);
}
}
sh.getRange(nr,ix+1,shx.getLastRow()-1,1).setValues(vAix);
}
}
}
}
一些测试代码,可用于在不同的列位置生成相同名称的标题。我评论了可以更改以影响其生成测试数据的方式。
function createTestData() {
var m=0;//0 for random column positions >0 for fixed position
var ss=SpreadsheetApp.getActive();
var sh=ss.getActiveSheet();
sh.clearContents();
var cols=10;//number of columns
var rows=20;//number of rows
var hpref='hdr';
var hA=[];
var hdrA=[];
var cA=[];
for(var i=0;i<cols;i++) {hA.push(i+1);};
for(var i=0;i<cols;i++) {
if(m==0) {
var index=Math.floor(Math.random() * hA.length);
}else{
var index=i;
}
var hnum=hA[index];
hdrA.push(hpref + hnum);
cA.push(hnum);
if(m==0) {
hA.splice(index,1);
}
}
sh.getRange(1,1,1,hdrA.length).setValues([hdrA]);
var rg=sh.getRange(2,1,rows,cols);
var vA=rg.getValues();
for(var i=0;i<rows;i++) {
for(var j=0;j<cols;j++) {
vA[i][j]=Number(i+1) + ',' + cA[j];
}
}
rg.setValues(vA);
}
页面名称在图像上。