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