斯普利特(掰开)在谷歌电子表格合并表格单元格中的应用程序的脚本(Split (break apart

2019-07-21 17:59发布

当操作包含合并单元格(复制/移动)的范围,我总是得到“您的粘贴内容与合并单元格重叠。 请取消合并单元格,然后再试一次”。 但是,试图取消合并使用范围中的单元格时, Range#breakApart ,我得到另一个错误:“所选单元格无法合并。”,因为我不是要合并的任何事情更加混乱,我只是想以破碎细胞分开。

Answer 1:

原来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
      )
    );
  }
}

(我已经添加五行/ COLS,而不是之一,因为越来越范围似乎是一个相当昂贵的过程)。 这工作得很好,只要你没有被添加额外的单元格合并为您扩大搜索区域做。

当涉及到合并单元格在电子表格中,谷歌Apps脚本API在至少通过以下方式从根本上打破:

  1. 没有办法让合并单元的范围的在片材/范围的阵列。
  2. 应该有一个办法,看看哪些细胞已被分割( breakApart只返回原始范围“为链接”)。 这使得它不可能拆分合并,然后让每个细胞都含有原合并单元格的内容。
  3. 尝试使用breakApart在仅包含合并单元格的一部分,应该还是掰开整个合并而不是抛出异常的范围。

所有的一切,因为它目前只站在API适用于电子表格其布局和使用脚本作者本人具有完全控制权。



文章来源: Split (break apart) merged table cells in google spreadsheet with an apps script