Javascript Google应用程序脚本中的循环和输出

Javascript Google应用程序脚本中的循环和输出,javascript,arrays,for-loop,google-apps-script,Javascript,Arrays,For Loop,Google Apps Script,我使用了两张表,rawData和processedData rawData如下所示: 状态标题选项 Live标题1选项1、选项2、选项3、选项4 Live标题2选项1、选项2、选项3、选项4、选项5 Live标题3选项1、选项2、选项3 processedData应如下所示: 状态标题选项 Live标题1选项1 empty标题1选项2 empty标题1选项3 empty标题1选项4 Live标题2选项1 empty标题2选项2 empty标题2选项3 empty标题2选项4 empty标题2选项

我使用了两张表,
rawData
processedData

rawData
如下所示:

状态
标题
选项

Live
标题1
选项1、选项2、选项3、选项4

Live
标题2
选项1、选项2、选项3、选项4、选项5

Live
标题3
选项1、选项2、选项3

processedData
应如下所示:

状态
标题
选项

Live
标题1
选项1

empty
标题1
选项2

empty
标题1
选项3

empty
标题1
选项4

Live
标题2
选项1

empty
标题2
选项2

empty
标题2
选项3

empty
标题2
选项4

empty
标题2
选项5

Live
标题3
选项1

empty
标题3
选项2

empty
标题3
选项3

empty
应该是空的,但不知道如何将其留空以表示空单元格

我试着使用这段代码,但我无法通过循环获得所需的输出

function formatData() {

  // File
  var ss = SpreadsheetApp.getActiveSpreadsheet();

  // Get rawData sheet
  var rawData = ss.getSheetByName('rawData');

  // Input data
  var data = rawData.getRange("A2:C").getValues(); // Gets titles and options in a single call to the sheet

  // Initialise an array that will hold the output
  var outputArray = [];

  // Name a variable to hold the data from each set of options
  var options;

  var status;

  // Start looping through the data
  for (var row = 0; row < data.length; row++) {

    status = data[row][0];

    outputArray.push([status]);

    // Split the options into an array: "Option1, Option2, Option3" ---> [Option1, Option2, Option3]
    options = data[row][1].split(", ");

    // Loop through the array of split options and place each of them in a new row
    for (var element = 0; element < options.length; element++) {

      outputArray.push([data[row][0], // Place the title in a new row
                        options[element]]); // Place one option in the 2nd column of the row

    } // Options loop ends here

  } // Data loop ends here

  // Get processedData sheet
  var processedData = ss.getSheetByName('processedData');

  // Get last row in processedData sheet
  var lastRow = processedData.getLastRow();

  // Post the outputArray to the sheet in a single call
  processedData.getRange(lastRow + 1, 1, outputArray.length, outputArray[0].length).setValues(outputArray);
}
函数formatData(){
//文件
var ss=SpreadsheetApp.getActiveSpreadsheet();
//获取原始数据表
var rawData=ss.getSheetByName('rawData');
//输入数据
var data=rawData.getRange(“A2:C”).getValues();//在对工作表的单个调用中获取标题和选项
//初始化将保存输出的数组
变量输出阵列=[];
//命名一个变量以保存每组选项中的数据
var期权;
var状态;
//开始在数据中循环
对于(变量行=0;行[Option1,Option2,Option3]
选项=数据[行][1]。拆分(“,”;
//循环浏览拆分选项数组,并将每个选项放置在新行中
对于(var元素=0;元素

我是这门语言的初学者,很抱歉问了一个可能非常基本的问题。

这个修改怎么样?请认为这只是几个修改中的一个

模式1: 修改脚本: 当您的脚本被修改时,它将变成如下所示。请按如下方式修改for循环

for (var row = 0; row < data.length; row++) {
  status = data[row][0];
  var title = data[row][1]; // Added
//    outputArray.push([status]); // Removed
  options = data[row][2].split(", "); // Modified
  for (var element = 0; element < options.length; element++) {
    if (element == 0) { // Added and modified
      outputArray.push([status, title, options[element]]);
    } else {
      outputArray.push(["", title, options[element]]);
    }
  }
}
  • 结果与模式1相同
注:
  • 在脚本中,“状态、标题、选项”的标题似乎没有被复制。这个怎么样
参考:

如果我误解了你的问题,并且这不是你想要的结果,我道歉。

谢谢你-我能够使用你的“模式1”代码完全完成我想要的。@kamen1111谢谢你的回答。我很高兴你的问题解决了。也谢谢你。
// Initialise an array that will hold the output
var outputArray = [];

// Name a variable to hold the data from each set of options
var options;

var status;

// Start looping through the data
for (var row = 0; row < data.length; row++) {

  status = data[row][0];

  outputArray.push([status]);

  // Split the options into an array: "Option1, Option2, Option3" ---> [Option1, Option2, Option3]
  options = data[row][1].split(", ");

  // Loop through the array of split options and place each of them in a new row
  for (var element = 0; element < options.length; element++) {

    outputArray.push([data[row][0], // Place the title in a new row
                      options[element]]); // Place one option in the 2nd column of the row

  } // Options loop ends here

} // Data loop ends here
var outputArray = data.reduce(function(ar1, e) {
  var h1 = e.splice(0, 1)[0];
  var h2 = e.splice(0, 1)[0];
  var options = e[0].split(", ");
  return ar1.concat(options.reduce(function(ar2, f, j) {
    if (f) ar2.push(j == 0 ? [h1, h2, f] : ["", h2, f]);
    return ar2;
  }, []));
}, []);