javascript - 是否可以从一列中提取不同的数据集?
问题描述
我一直在尝试编写一些代码,这些代码根据一些简单的公式查找带有字符串的一列。我似乎无法让它识别不同的数据集并将它们粘贴到我想要的位置。
我尝试用几种不同的方式重新编写代码,其中查看所有数据并将目标行偏移 1。但它没有认识到它是拉不同的数据。
下面是有效的代码。它的作用是从第一列第二行(我的数据开始的地方)开始。数据是一个类似的列表;
A
1 Customer1
2 item1
3 item2
4 Item3
5
6 Customer2
7 Item1
我在这些单元格中的公式只是连接了其他一些单元格。使用循环它查看 A 列并找到空白区域。然后它“打破”它停止的任何数字,单元格的数字 A1 表示法,然后找到这些单元格的值并将它们转置在正确行的另一张表中。
我遇到的问题是这个代码运行得最好的代码是它不会将任何单元格读取为空白(因为公式?)并将所有单元格转置到同一行。
function transpose(){
var data = SpreadsheetApp.getActiveSpreadsheet();
var input =data.getSheetByName("EMAIL INPUT");
var output = data.getSheetByName("EMAIL OUTPUT");
var lr =input.getLastRow();
for (var i=2;i<20;i++){
var cell = input.getRange(i, 1).getValue();
if (cell == ""){
break
}
}
var set = input.getRange(2, 1, i-1).getValues();
output.getRange(2,1,set[0].length,set.length) .
.setValues(Object.keys(set[0]).map ( function (columnNumber) {
return set.map( function (row) {
return row[columnNumber];
});
}));
Logger.log(i);
Logger.log(set);
}
我需要代码做的是查看所有数据并按条件分隔数据集。然后将该信息转置在另一张纸上。每组(或数组)数据将进入不同的行。每个组件填充列([“customer1”,“Item1”,“Item2”]。
编辑:是否可以从单个列中提取不同的数据集并将它们转换为数组?我相信如果我使用“appendrow”将我的不同数组转移到我需要它们的地方,那么能够做到这一点。
解决方案
测试单元格的长度。即使是公式,它也会根据值评估结果。
if (cell.length !=0){
// the cell is NOT empty, so do this
}
else
{
// the cell IS empty, so do this instead
}
EXTRA 此代码采用您的目标并完成数据的转置。
代码没有它可能/应该有的效率,因为它包含getRange
并setValues
在循环内部。理想情况下,可以/应该在一个命令中设置整个输出范围,但是(未解决的)挑战是提前知道每个连续范围的最大行数,以便可以为小于最大行数的行设置空白值行。
这将是一个值得做出的改变。
function so5671809203() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var inputsheetname = "EMAIL_INPUT";
var inputsheet = ss.getSheetByName(inputsheetname);
var outputsheetname = "EMAIL_OUTPUT";
var outputsheet = ss.getSheetByName(outputsheetname);
var inputLR =inputsheet.getLastRow();
Logger.log("DEBUG: the last row = "+inputLR);
var inputrange = inputsheet.getRange(1, 1,inputLR+1);
Logger.log("the input range = "+inputrange.getA1Notation());
var values = inputrange.getValues();
var outputval=[];
var outputrow=[];
var counter = 0; // to count number of columns in array
for (i=0;i<inputLR+1;i++){
Logger.log("DEBUG: Row:"+i+", Value = "+values [i][0]+", Length = "+values [i][0].length);
if (values [i][0].length !=0){
// add this to the output sheet
outputrow.push(values [i][0]);
counter = counter+1;
Logger.log("DEBUG: value = "+values [i][0]+" to be added to array. New Array Value = "+outputrow+", counter = "+counter);
}
else
{
// do nothing with the cell, but add the existing values to the output sheet
Logger.log("DEBUG: Found a space - time to update output");
// push the values onto an clean array
outputval.push(outputrow);
// reset the row array
outputrow = [];
// get the last row of the output sheet
var outputLR =outputsheet.getLastRow();
Logger.log("DEBUG: output last row = "+outputLR);
// defie the output range
var outputrange = outputsheet.getRange((+outputLR+1),1,1,counter);
Logger.log("DEBUG: the output range = "+outputrange.getA1Notation());
// update the values with array
outputrange.setValues(outputval);
// reset the row counter
counter = 0;
//reset the output value array
outputval=[];
}
}
}
推荐阅读
- java - HikariPool-1 - 在连接获取期间中断
- graphql - 如何重新获取 gatsby 构建的 graphql 数据?
- java - Jetty_run 错误 java.lang.TypeNotPresentException:类型 javax.annotation.meta.When 不存在
- security - 如何防止 setmetatable 被覆盖
- kubernetes - 当我尝试启动 minikube 时收到错误消息“运行时错误:索引超出范围 [0],长度为 0”
- python - 为什么我的 python 字典一直被覆盖
- windows - Docker 图像命令不返回所有图像
- sql - 如何仅使用 Oracle SQL 返回 2 个字符串之间的差异
- database-design - 为什么 facebook messenger 和 discord 使用数据库而不是排队系统来获取他们的消息?
- google-apps-script - 无法在清单文件中设置会议解决方案的密钥