2013-03-15 58 views
0

当操作(复制/移动)包含合并单元格的范围时,我总是收到错误“您的粘贴与合并单元格重叠。请取消合并单元格,然后重试“。但是,当试图使用Range#breakApart解除范围内的单元格时,出现另一个错误:“所选单元格无法合并。”,这更令人困惑,因为我没有尝试合并任何东西,我只是试图打破细胞分开。在应用程序脚本中将Google电子表格中的表格单元格拆分(拆分)

回答

3

原来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只适用于脚本作者自己完全控制其布局和用法的电子表格。

+0

聪明的想法这种尝试/捕捉方法......以及相关的评论。 +1&thanks //注意:不应该在扩展区域时检查最大列和最大行参数吗? – 2013-03-15 21:09:14

+0

@Sergeinsas谢谢,我更新了我的文章以包含您的建议。 – 2013-03-16 13:37:52

相关问题