当单元格在列中具有相同值时如何合并单元格(GOOGLE 脚本)

How to MERGE cells when cells are having same value in a column (GOOGLE SCRIPT)

如何在单元格具有相同值时合并列中的单元格

脚本 1:仅合并 B:B 列中的单元格(Ver/Hor = center/center)

脚本 2:合并 B:B 列和 E:E 列中的单元格(Ver/Hor = center/center)

Sample Here

此致,

我相信你的目标如下。

  • 当列方向连续存在相同的值时,想将“B”列和“E”列的单元格合并到垂直方向。以下示例情况图片来自您的问题。

  • 您想使用 Google Apps 脚本实现此目的。

在这种情况下,我想提出以下示例脚本。

示例脚本:

在使用此脚本之前,请设置columnssheetName的变量。以下示例脚本合并了“Shet1”的列“B”和“E”。

function myFunction() {
  const columns = [2, 5]; // These column numbers are the columns "B" and "E". This is from your question.
  const sheetName = "Sheet1";  // Please set the sheetname.

  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
  const [,...values] = sheet.getDataRange().getValues();
  values[0]
  .map((_, i) => values.map(e => e[i]))
  .forEach((col, i) => {
    if (!columns.includes(i + 1)) return;
    let temp = {};
    col.forEach((row, j) => {
      if (row === col[j + 1] && !(row in temp)) {
        temp[row] = j;
      } else if (row != col[j + 1] && row in temp) {
        sheet.getRange(temp[row] + 2, i + 1, (j - temp[row]) + 1, 1).merge();
        temp = {};
      }
    });
  });
}

参考文献:

已添加:

关于您的以下附加问题,

The script is perfect. How to modify the script if I want to start at row# 7?

修改以上脚本后,变成如下

示例脚本:

function myFunction() {
  const columns = [2, 5]; // These column numbers are the columns "B" and "E". This is from your question.
  const sheetName = "Sheet1";  // Please set the sheetname.

  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
  const [,,,,,,...values] = sheet.getDataRange().getValues();
  values[0]
  .map((_, i) => values.map(e => e[i]))
  .forEach((col, i) => {
    if (!columns.includes(i + 1)) return;
    let temp = {};
    col.forEach((row, j) => {
      if (row === col[j + 1] && !(row in temp)) {
        temp[row] = j;
      } else if (row != col[j + 1] && row in temp) {
        sheet.getRange(temp[row] + 7, i + 1, (j - temp[row]) + 1, 1).merge();
        temp = {};
      }
    });
  });
}