javascript - 将多个工作表组合到主工作表的脚本
问题描述
目前的脚本代码有错误,请看视频和代码,结果是预期的
提前致谢
解决方案
使用标题字符串作为键组合其他工作表中存在于 Master 上的特定列
此函数将读取主标题并在所有其他工作表上查找这些标题并在主文件中的正确列下返回。如果它没有找到特定的标题,它将返回工作表名称、标题名称和未找到的字符串“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);
}
工作表名称在图像上。
推荐阅读
- python - api 访问 imdb 最受好评的电影
- c# - 自定义 msbuild 任务尝试加载错误版本的依赖项
- python-3.x - 变量和文件名中的迭代器
- python - 如何在 Python 请求模块中获取响应 URL?
- python - RBF 岭回归是否有 python 函数?
- python - 正则表达式:选择两个斜杠之间的匹配项?
- javascript - 我想在 jQuery 上获取 $(this) 中元素的文本内容
- python - 我正在尝试用 (0,1,2,3,4,5) 替换矩阵的第一列
- node.js - 如何从节点接收 JSON 对象并在客户端显示它?
- html - 我怎样才能让这个布局像它应该的那样对齐?