Javascript 是否可以从一列中提取不同的数据集?

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 这些单元格中的公式只是连接了一

我一直在尝试编写一些代码,根据一些简单的公式查找一列字符串。我似乎无法识别不同的数据集并将它们粘贴到我想要的地方

我尝试过以几种不同的方式重新编写代码,is查看所有数据,只将目标行偏移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);
       }
函数转置(){
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。