首页 > 解决方案 > 在 Doc Google 表格中编写 Google 合并单元格脚本

问题描述

我尝试编写一个脚本以合并 Google 文档中的 2 个(或多个)单元格。无论如何,结果并不像我预期的那么好,因为我刷新页面时出错,并且视觉上合并的单元格不长表合并的结果和初始表在此处输入图像描述

我的谷歌脚本是:

function onOpen() {
  // Add a menu with some items, some separators, and a sub-menu.
  DocumentApp.getUi().createMenu('Sample')
      .addItem('Fusion cellules tableau', 'mergeCells')          
      .addToUi();
}



function mergeCells() {
  var body = DocumentApp.getActiveDocument().getBody();
  for (var p= 0; p< body.getNumChildren(); p++) {
    var child = body.getChild(p);
    if (child.getType() == DocumentApp.ElementType.TABLE){
      // Assume we've already located our table
      var table = child;
      var tableRow = table.getChild(2); // gets third row
      var tableCell = tableRow.getChild(1); // gets second cell in row
      tableCell.merge(); // Merges seconde cell with first cell.      
      }
  }
}

所以如果你有一个想法我会很高兴:)

标签: javascriptgoogle-apps-scriptgoogle-docsgoogle-docs-api

解决方案


对不起,这似乎很令人沮丧。我能够重现您的问题,它看起来像 .merge() 方法与表格单元格一起使用的方式的错误。脚本 .merge() 将元素的内容与前一个元素的内容组合在一起,然后删除第二个元素。这实际上与合并单元格(在文档中)的工作方式不同。当您从文档中合并单元格时,它实际上并没有删除任何元素,只是更改了显示,以便您无法访问“隐藏”单元格。如果您在包含合并单元格的行上调用 getNumChildren() ,它仍然具有完整的列数。

在单元格上运行 .merge() 会删除第二个孩子,并且似乎创建了一个不允许的表结构,这可能是它引发错误的原因。

顺便说一句,您可以在单元格上调用 .getRowSpan() 方法,该方法为正常单元格返回 1,为合并单元格返回 0,但是,不方便的是,没有“setRowSpan()”,所以它看起来不像您可以从脚本中进行常规样式合并。

几年前这里有一个类似的问题。

这里也是谷歌列出的错误。它来自 5(!)年前。你可以尝试在那里发帖。

也许您可以尝试使用脚本复制内容并更改单元格之间的边框样式/宽度,但这似乎是一个巨大的痛苦。祝你好运!


推荐阅读