2013-03-15 100 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

相關問題