Google apps script 如果A列的单元格被合并,则E列中要合并的确切单元格
我的工作表包括班组工作时间的详细信息。A列为序列号。E列为总工作时数。一天的工作包括小班次和一些细节,如序列号、姓名、乘务员身份证会被重复 我想合并具有相同单元格值的列(A列和E列)。我已经能够合并S.No的A列(感谢本论坛的@Tanaike),并希望对E列做同样的事情 条件-如果A列合并,则E列中应合并的单元格数正好为零。因此,如果A11、A12合并=E11,E12应合并;A13未合并=E13未合并;A14、A15、A16、A17合并=E14、E15、E16、E17应合并。 谢谢 有关守则-Google apps script 如果A列的单元格被合并,则E列中要合并的确切单元格,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我的工作表包括班组工作时间的详细信息。A列为序列号。E列为总工作时数。一天的工作包括小班次和一些细节,如序列号、姓名、乘务员身份证会被重复 我想合并具有相同单元格值的列(A列和E列)。我已经能够合并S.No的A列(感谢本论坛的@Tanaike),并希望对E列做同样的事情 条件-如果A列合并,则E列中应合并的单元格数正好为零。因此,如果A11、A12合并=E11,E12应合并;A13未合并=E13未合并;A14、A15、A16、A17合并=E14、E15、E16、E17应合并。 谢谢 有关守
// merge columns vertically for same cell value for Column A
var start = 10; //data starts from row 10
var c = {};
var k = "";
var offset = 0;
// Retrieve values of column A
var data = destSheet.getRange(start, 1, lastRow-2, 1).getValues().filter(String);
// Retrieve the number of duplication values.
data.forEach(function(e){c[e[0]] = c[e[0]] ? c[e[0]] + 1 : 1;});
// Merge cells.
data.forEach(function(e){
if (k != e[0]) {
destSheet.getRange(start + offset, 1, c[e[0]], 1).merge();
offset += c[e[0]];
}
k = e[0];
});
解决问题的两种方法
- 您可以通过在列A中的所有合并范围中循环,检索它们的开始行和结束行,并合并列E中的各个范围来完成此操作:
你能提供一些关于你想做什么的详细信息吗?A列中的单元格是否合并到原始电子表格或目标电子表格中?您想在哪里相应地合并列E中的单元格?您能否将提供的代码简化为与特定问题相关的代码?也许还可以提供一个可视化的测试电子表格?@ziganotschka非常感谢您的关注。我已经按照你的建议编辑了我的原始问题。请看一看,让我知道你需要什么更多的信息。我已经测试了方法1,它工作得非常好!!我想坚持这种做法@ziganotschka非常感谢您的即时帮助。所有的力量都给你!! var range = destSheet.getRange(1,1, destSheet.getLastRow(), 1); var mergedRanges = range.getMergedRanges(); for (var i = 0; i < mergedRanges.length; i++) { Logger.log(mergedRanges[i].getA1Notation()); var start = mergedRanges[i].getRow(); var end = mergedRanges[i].getLastRow(); var destinationRange = destSheet.getRange(start, 5, end - start + 1, 1); destinationRange.mergeVertically(); } var range = destSheet.getRange(1,1, destSheet.getLastRow(), 1); var destinationRange = destSheet.getRange("E1"); range.copyTo(destinationRange, SpreadsheetApp.CopyPasteType.PASTE_FORMAT, false);