Javascript 是否可以从一列中提取不同的数据集?
我一直在尝试编写一些代码,根据一些简单的公式查找一列字符串。我似乎无法识别不同的数据集并将它们粘贴到我想要的地方 我尝试过以几种不同的方式重新编写代码,is查看所有数据,只将目标行偏移1。但它并没有意识到这是不同的数据 下面是有效的代码。它所做的是从第一列第二行(我的数据从这里开始)开始。数据是一个列表式的Javascript 是否可以从一列中提取不同的数据集?,javascript,multidimensional-array,google-apps-script,google-sheets,Javascript,Multidimensional Array,Google Apps Script,Google Sheets,我一直在尝试编写一些代码,根据一些简单的公式查找一列字符串。我似乎无法识别不同的数据集并将它们粘贴到我想要的地方 我尝试过以几种不同的方式重新编写代码,is查看所有数据,只将目标行偏移1。但它并没有意识到这是不同的数据 下面是有效的代码。它所做的是从第一列第二行(我的数据从这里开始)开始。数据是一个列表式的 A 1 Customer1 2 item1 3 item2 4 Item3 5 6 Customer2 7 Item1 这些单元格中的公式只是连接了一
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);
}
函数转置(){
var data=SpreadsheetApp.getActiveSpreadsheet();
var input=data.getSheetByName(“电子邮件输入”);
var output=data.getSheetByName(“电子邮件输出”);
var lr=input.getLastRow();
对于(var i=2;i测试单元格的长度。即使它是一个公式,它也会根据该值评估结果
if (cell.length !=0){
// the cell is NOT empty, so do this
}
else
{
// the cell IS empty, so do this instead
}
额外的
这段代码实现了您的目标并完成了数据的转换
代码可能/应该没有那么有效,因为它在循环中包含getRange
和setValues
。
理想情况下,可以/应该在一个命令中设置整个输出范围,但(未回答的)挑战是提前知道每个连续范围的最大行数,以便可以为小于最大行数的行设置空白值
这将是一个值得做出的改变
函数so5671809203(){
var ss=SpreadsheetApp.getActiveSpreadsheet();
var inputsheetname=“电子邮件输入”;
var inputsheet=ss.getSheetByName(inputsheetname);
var outputsheetname=“电子邮件输出”;
var outputsheet=ss.getSheetByName(outputsheetname);
var inputLR=inputsheet.getLastRow();
Logger.log(“调试:最后一行=“+inputLR”);
var inputrange=inputsheet.getRange(1,1,inputLR+1);
Logger.log(“输入范围=“+inputrange.getA1Notation());
var values=inputrange.getValues();
var outputval=[];
var outputrow=[];
var counter=0;//计算数组中的列数
对于(i=0;i测试单元格的长度。即使它是一个公式,它也会根据该值评估结果
if (cell.length !=0){
// the cell is NOT empty, so do this
}
else
{
// the cell IS empty, so do this instead
}
额外的
这段代码实现了您的目标并完成了数据的转换
代码可能/应该没有那么有效,因为它在循环中包含getRange
和setValues
。
理想情况下,可以/应该在一个命令中设置整个输出范围,但(未回答的)挑战是提前知道每个连续范围的最大行数,以便可以为小于最大行数的行设置空白值
这将是一个值得做出的改变
函数so5671809203(){
var ss=SpreadsheetApp.getActiveSpreadsheet();
var inputsheetname=“电子邮件输入”;
var inputsheet=ss.getSheetByName(inputsheetname);
var outputsheetname=“电子邮件输出”;
var outputsheet=ss.getSheetByName(outputsheetname);
var inputLR=inputsheet.getLastRow();
Logger.log(“调试:最后一行=“+inputLR”);
var inputrange=inputsheet.getRange(1,1,inputLR+1);
Logger.log(“输入范围=“+inputrange.getA1Notation());
var values=inputrange.getValues();
var outputval=[];
var outputrow=[];
var counter=0;//计算数组中的列数
对于(i=0;iIt看起来代码有一些输入错误,如output.getRange(2,1,set[0].length,set.length)。
然后是下一行.setValues(Object.keys(set[0]).map(函数(columnNumber){
。您在这里传递代码时遇到问题了吗?另一方面,请阅读。@Rubén。我在查找转置时从另一个网站获取了部分脚本。从执行情况来看,这部分脚本似乎没有任何问题code@HannaLogan详细的后续问题通常作为单独的问题提出-部分保持一问一答的方法,部分原因是“编辑”可能不会被所有最有资格提供帮助的人看到。无论如何,你的“编辑”并不清楚你想要实现什么(它没有你先前问题的背景)而且你还没有提供一个成功结果的例子。除非我误解了你的“编辑”,否则我认为最好把它作为一个新问题提出来。代码似乎有一些拼写错误,比如output.getRange(2,1,set[0].length,set.length)。
然后是下一行.setValues(Object.keys(set[0]).map(function(columnNumber){
。您在这里传递代码时遇到问题了吗?另一方面,请阅读。@Rubén。我在查找转置时从另一个网站获取了部分脚本。从执行情况来看,这部分脚本似乎没有任何问题code@HannaLogan详细的后续问题通常作为单独的问题提出-部分保持一问一答的方法,部分原因是“编辑”可能不会被所有最有资格提供帮助的人看到。无论如何,你的“编辑”并不清楚你想要实现什么(它没有你先前问题的背景)你没有提供一个成功的例子。除非我误解了你的“编辑”,我认为这可能是一个新的问题。@ HannaLogan,如果这个答案是有用的,那么你可以考虑ACCE。