在应用程序脚本中将Google电子表格中的表格单元格拆分(拆分)
问题描述:
当操作(复制/移动)包含合并单元格的范围时,我总是收到错误“您的粘贴与合并单元格重叠。请取消合并单元格,然后重试“。但是,当试图使用Range#breakApart
解除范围内的单元格时,出现另一个错误:“所选单元格无法合并。”,这更令人困惑,因为我没有尝试合并任何东西,我只是试图打破细胞分开。在应用程序脚本中将Google电子表格中的表格单元格拆分(拆分)
答
原来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是从根本上至少在以下几个方面打破:
- 有没有办法让合并单元格范围的阵列片/范围。
- 应该有办法查看哪些单元格已被拆分(
breakApart
只返回原始范围“链接”)。这使得拆分合并,然后让每个单元格包含原始合并单元格的内容是不可能的。 - 试图在仅包含合并单元的一部分的范围内使用
breakApart
仍应拆开整个合并而不是抛出异常。
总而言之,目前的API只适用于脚本作者自己完全控制其布局和用法的电子表格。
聪明的想法这种尝试/捕捉方法......以及相关的评论。 +1&thanks //注意:不应该在扩展区域时检查最大列和最大行参数吗? – 2013-03-15 21:09:14
@Sergeinsas谢谢,我更新了我的文章以包含您的建议。 – 2013-03-16 13:37:52