使用应用程序脚本在Google电子表格中拆分(拆分)合并的表格单元格

Rap*_*ert 2 javascript google-sheets google-apps-script

当操作(复制/移动)包含合并单元格的范围时,总是出现错误“您的粘贴与合并单元格重叠。请取消合并单元,然后重试”。但是,当尝试使用取消合并范围中的单元格时Range#breakApart,我收到另一个错误:“无法合并所选的单元格。”由于我不尝试合并任何内容,这更加令人困惑,我只是在尝试打破细胞分开。

Rap*_*ert 5

breakApart只有在调用它的范围包含所有合并的单元格,而不仅仅是合并区域的一部分时,结果才起作用。

这不会太糟。一旦意识到API中无法获取合并单元格的范围,问题就开始了。因此,解决此问题的最佳方法(到目前为止,我已经发现)是逐渐扩大范围,直到没有错误发生:

var breakRange = myRange;
for(;;) {
  try {
    breakRange.breakApart();
    break;
  } catch(e) {
    breakRange = mySheet.getRange(
      breakRange.getRowIndex(),
      breakRange.getColumnIndex(),
      Math.min(
        breakRange.getHeight()+5,
        mySheet.getMaxRows()-breakRange.getRowIndex()+1
      ),
      Math.min(
        breakRange.getWidth()+5,
        mySheet.getMaxColumns()-breakRange.getColumnIndex()+1
      )
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

(我添加了五行/列而不是一列,因为获取范围似乎是一个相当昂贵的过程)。只要在扩展搜索区域时没有添加其他合并的单元格,此方法就可以很好地工作。

当涉及电子表格中的合并单元格时,Google Apps Scripts API至少在以下方面会从根本上被破坏:

  1. 无法获得工作表/范围中合并单元格范围的数组。
  2. 应该有一种方法可以查看已拆分的单元格(breakApart仅返回“用于链接”的原始范围)。这使得不可能拆分合并,然后让每个单元格包含原始合并单元格的内容。
  3. 尝试breakApart在仅包含合并单元格一部分的范围内使用,仍应拆分整个合并,而不是抛出异常。

总而言之,目前的API仅适用于电子表格,脚本作者自己可以完全控制这些电子表格的布局和使用情况。