Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 如何根据一个单元格的值是用逗号分隔还是在Google工作表中用新行分隔,将单行拆分为多行?_Google Apps Script_Google Sheets_Google Forms - Fatal编程技术网

Google apps script 如何根据一个单元格的值是用逗号分隔还是在Google工作表中用新行分隔,将单行拆分为多行?

Google apps script 如何根据一个单元格的值是用逗号分隔还是在Google工作表中用新行分隔,将单行拆分为多行?,google-apps-script,google-sheets,google-forms,Google Apps Script,Google Sheets,Google Forms,电子表格中的某些单元格的单元格内容由逗号或新行分隔 123876456 列“C”是确定是否应将一行拆分为多行的列 表格中的信息进入“表格提交”页面 我们有一个特定的格式,我们必须满足提交给我们的报告跟踪软件的要求,该格式要求将问题编号(见C列)分为各自的行,a:B、D:J列中的信息保持不变(见预期结果表) 我找到了一个应用程序,并将其应用到我们的谷歌表单中 此脚本要求在单独的工作表中,将函数=result('FormSubmission'!A2:J)放置在我们希望显示数据的第一列/行中(请参阅

电子表格中的某些单元格的单元格内容由逗号或新行分隔

123876456

列“C”是确定是否应将一行拆分为多行的列

表格中的信息进入“表格提交”页面

我们有一个特定的格式,我们必须满足提交给我们的报告跟踪软件的要求,该格式要求将问题编号(见C列)分为各自的行,a:B、D:J列中的信息保持不变(见预期结果表)

我找到了一个应用程序,并将其应用到我们的谷歌表单中

此脚本要求在单独的工作表中,将函数
=result('FormSubmission'!A2:J)
放置在我们希望显示数据的第一列/行中(请参阅“当前结果”工作表,单元格A2)

以下是我们正在使用的编码:

function result(range) {
  var output2 = [];
  for(var i = 0, iLen = range.length; i < iLen; i++) {
    var s = range[i][2].split("\n");    
    for(var j = 0*/, jLen = s.length; j < jLen; j++) {
      var output1 = []; 
      for(var k = 0, kLen = range[0].length; k < kLen; k++) {
        if(k == 2) {
          output1.push(s[j]);
        } else {
          output1.push(range[i][k]);
        }
      }
      output2.push(output1);
    }    
  }
  return output2;
} 

function results(range) {
  var output2 = [];
  for(var i = 0 /, iLen = range.length; i < iLen; i++) {
    var s = range[i][2].split(",");    
    for(var j = 0 /, jLen = s.length; j < jLen; j++) {
      var output1 = []/; 
      for(var k = 0, kLen = range[0].length; k < kLen; k++) {
        if(k == 2 /) {
          output1.push(s[j]);
        } else {
          output1.push(range[i][k]);
        }
      }
      output2.push(output1);
    }    
  }
  return output2;
} 
功能结果(范围){
变量输出2=[];
对于(变量i=0,iLen=range.length;i

如果有人在表单中提交了多个以逗号分隔的问题编号,则需要将该行拆分为多行,如所需的结果表所示。

以下是我测试的一些代码,它可以工作。它也适用于既有新行又有逗号分隔值的单元格。不要求将范围传递到。这个代码不需要这个。它将新行直接写入“当前结果”表

function result() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var frmSubmissionSheet = ss.getSheetByName('Form Submission');
  var desiredOutcomeSheet = ss.getSheetByName('Current Outcome');

  var data = frmSubmissionSheet.getRange(1, 1, frmSubmissionSheet.getLastRow(), frmSubmissionSheet.getLastColumn()).getValues();

  var issueNumbers = "",
      hasComma = false,
      arrayOfIssueNumbers = [],
      arrayRowData = [],
      thisRowData,
      hasNewLine;

  for (var i=0;i<data.length;i+=1) {
    if (i===0) {continue}; //Skip row 1

    issueNumbers = data[i][2];
    hasComma = issueNumbers.indexOf(",") !== -1;
    hasNewLine = issueNumbers.indexOf("\n") !== -1;
    Logger.log(hasNewLine)
    if (!hasComma && !hasNewLine) {
      desiredOutcomeSheet.appendRow(data[i]);
      continue;  //Continue to next loop, there are no multiple issue numbers
    };

    if (hasNewLine) {
      var arrayNewNewLine = issueNumbers.split("\n");//Get rid of new line
      issueNumbers = arrayNewNewLine.toString(); //Back to string.  Handles cells with both new line and commas
    };

    arrayOfIssueNumbers = [];
    arrayOfIssueNumbers = issueNumbers.split(",");

    for (var j=0;j<arrayOfIssueNumbers.length;j+=1) {
      arrayRowData = []; //Reset
      thisRowData = [];

      thisRowData = data[i];
      for (var k=0;k<thisRowData.length;k+=1) {
        arrayRowData.push(thisRowData[k]);
      };

      arrayRowData.splice(2, 1, arrayOfIssueNumbers[j]);
      desiredOutcomeSheet.appendRow(arrayRowData);
    };
  };
};
函数结果(){
var ss=SpreadsheetApp.getActiveSpreadsheet();
var frmSubmissionSheet=ss.getSheetByName(“表单提交”);
var desiredOutcomeSheet=ss.getSheetByName(“当前结果”);
var data=frmSubmissionSheet.getRange(1,1,frmSubmissionSheet.getLastRow(),frmSubmissionSheet.getLastColumn()).getValues();
var issueNumbers=“”,
hascoma=false,
阵列财政数字=[],
arrayRowData=[],
此行数据,
hasNewLine;

对于(var i=0;i,除了Sandy的贡献之外,还有一些替代代码:

function extract(range, colToSplit, delimiter) {
var resArr = [], row;
range.forEach(function (r) {
    r[colToSplit-1].replace(/(?:\r\n|\r|\n)(\d|\w)/g,", ").split(delimiter)
        .forEach(function (s) {
            row = [];
            r.forEach(function (c, k) {               
                row.push( (k === colToSplit-1) ? s.trim() : c);
            })
            resArr.push(row);
        })
})
return resArr;
}

这是一个接受三个参数的自定义函数:

  • 靶场
  • 拆分应基于的列
  • 要拆分的分隔符
  • 可在电子表格中使用,如下所示:

    =extract('Form Submission'!A1:J, 3, ", ")
    
    代码将所有新行字符(后跟数字或字母)替换为逗号,并使用逗号作为分隔符拆分(基于第3列)

    我希望这有帮助