使用google脚本将2列放入一个多维数组中
Use google script to put 2 columns into a single multi dimensional array
我正在寻找一种方法,在谷歌电子表格中采取2列,并将它们合并成一个数组,希望我可以采取这2列,并在一个新的工作表上使用setValues
。
为什么?
我最终采取2个不同的表,基本上做一个大规模的vlookup和转移所有的结果和所需的列到一个单一的,新的表。我可以得到完整的dataRange
,循环遍历每个数组,获取我想要的值并将它们推入一个新数组。但是有没有更简单的方法呢?如果我能遍历第一行,得到标题和它们的索引,我能把所有的A列和D列放到一个多维数组中吗?
Header1 | H2 | H3
Header1 | H2 | H3
我想要H1和H3和它们的行,这样我就可以把它们放到一个新的工作表中,像
多维数组:当前代码[[H1, H3], [dataH1,dataH3]]
var freqArr = new Array(); //Array with sheet data
var myArray = new Array(); //Blank array to house header index
var freqSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('KEY_test_test');
var freqData = freqSheet.getDataRange(); //all data
var freqNumRows = freqData.getNumRows(); //number of rows
var freqNumCol = freqData.getNumColumns(); //number of columns
freqArr = freqSheet.getRange(1, 1, freqNumRows, freqNumCol).getValues();
for (i = 0;i<1;++i){
for (j = 0;j<freqNumCol;++j){
if (freqArr[i][j].toString() == 'Header1' || freqArr[i][j].toString() == 'Header3'){
myArray.push([j]);
}
}
}
Logger.log(myArray);
Where I' s Stuck
我现在正在做的是通过第一行循环获得我想要的标题索引(应该看起来像这个[ 0, 2 ]
),但所有在我的日志中返回的是[]。我计划使用这个索引数组循环遍历freqData
并获取每个嵌套数组的索引。
任何建议都会很好。我刚刚开始学习谷歌脚本,我正在自学。由于
UPDATE TO CODE:
事实证明,.toString() == 'Header1'
不会返回匹配,但经过更多的谷歌fu,我发现.toString().match('Header1') == 'Header1'
将返回我需要的。
var freqArr = new Array(); //Array with sheet data
var myArray = new Array(); //Blank array to house header index
var freqSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('KEY_test_test');
var freqData = freqSheet.getDataRange(); //all data
var freqNumRows = freqData.getNumRows(); //number of rows
var freqNumCol = freqData.getNumColumns(); //number of columns
freqArr = freqSheet.getRange(1, 1, freqNumRows, freqNumCol).getValues();
for (i = 0;i<1;++i){
for (j = 0;j<freqNumCol;++j){
if (freqArr[i][j].toString().match('Header1') == 'Header1' || freqArr[i][j].toString().match('Header3') == 'Header3'){
myArray.push(j);
}
}
}
Logger.log(myArray);
将返回[ 0.0 , 2.0 ]
。
但是,我的问题仍然存在,是否有一种更快的方法来获得2(n)列不是并排并将它们放入数组中,以便您可以使用.setValues
?
答案
但是,我的问题仍然存在,是否有一种更快的方法来获得2(n)列不是并排并将它们放入数组中,以便您可以使用。setvalues ?
是的,有很多方法。其中之一是使用JavaScript方法:array.prototype.forEach()
function myFunction() {
var sheet = SpreadsheetApp.getActiveSheet();
var data = sheet.getDataRange().getValues();
var array = [];
data.forEach(function(row){
array.push([row[0],row[5]]);
});
sheet.getRange(1,10,array.length,2).setValues(array);
}
<标题>
function myFunction() {
var sheet = SpreadsheetApp.getActiveSheet();
var data = sheet.getDataRange().getValues();
var array = [];
data.forEach(function(row){
array.push([row[0],row[5]]);
});
sheet.getRange(1,10,array.length,2).setValues(array);
}
获取活动表单
var sheet = SpreadsheetApp.getActiveSheet();
获取sheet
var data = sheet.getDataRange().getValues();
初始化一个变量来保存数组
var array = [];
获取第一列和第六列(A和F)的值(从零开始的索引)
data.forEach(function(row){
array.push([row[0],row[5]]);
});
返回从J1开始到K列和所需行(基于一个索引)结束的值
sheet.getRange(1,10,array.length,2).setValues(array);
标题>
看看简单邮件合并教程中的getRowsData()
函数。它将获取表格中的所有数据并将其作为对象返回。然后您可以访问myData[i].header1
数据,它将删除空格并"规范化"标题。例如我的标题名称将是myData[i].myHEaderName
如果您愿意,可以将返回的数据限制为仅需要的列。
- Javascript(Angular)从一个对象数组到第二个数组查找值
- 根据id将json数组组合为一个json数组
- JavaScript数组包含一个值
- 对一个对象使用reduce可以返回一个没有't在数组中包含目标字母
- jQuery$.inArray()总是返回-1和一个对象数组
- 在数组中的一个元素上设置多个值
- javascript处理一个对象数组以获得一个新的对象数组
- 作为一个二维数组,从ajax接收
- 你能用来自数组的属性名称生成一个对象吗
- 多维关联数组的最后一个索引
- 如何创建一个方法来验证数组的范围
- 循环以检查数组中的最后一个图像
- 在Javascript中将一个值和字符串数组转换为if语句
- 算法:从数组(javascript/angular)中按当前日期获取上一个和下一个事件
- 如何将一个对象添加到每个对象数组中
- 如何创建一个谷歌地图地理坐标数组
- 如何从另一个带下划线的数组中筛选带元素的数组
- 如何在PHP数组中加载下一个youtube
- 查找对象数组是否包含其中一个标记的最快方法
- 如何使用Javascript和Ajax传递一个HTML选择标签到PHP $_POST与一个(数组)var当名称属性是一个