2013-08-30 1 views
0

스크립트가 실행을 마친 후에 "병합 시작을 숨길 수 없습니다"라는 메시지가 나타납니다.죄송합니다. 병합 시작을 숨길 수 없습니다.

스크립트는 제목 필드가 비어 있고 비어 있지 않은 범위의 모든 열을 숨 깁니다. 나는 컬럼의 일부가 수직 병합을 가지고 있고 그것이 문제를 일으킨다는 것을 발견했다. 이 세포가 병합되지 않은 경우 다음 문제가 없습니다

var activeSpreadsheet = SpreadsheetApp.getActiveSpreadsheet(); 
var customColumnsRanges = activeSpreadsheet.getRangeByName("TheseOnes"); 

function resetColumnsVisibilityIfNotBlank() { 

    var sheet = customColumnsRanges.getSheet() 
    var column = customColumnsRanges.getColumn(); 
    var length = customColumnsRanges.getWidth(); 
    var customColumns = customColumnsRanges.getValues(); 

    for (var i = 0; i < length; ++i) { 

    if (customColumns[0][i] == "") { 
     sheet.hideColumns(column); 
    } else { 
     sheet.showColumns(column); 
    } 

    ++column; 

    } 

} 

: https://docs.google.com/spreadsheet/ccc?key=0AphsvceI4elpdGtTSWwtalFpT2xkUWxvNDV1cVZ1S1E&usp=sharing

스크립트 코드는이 스프레드 시트에 대한 링크입니다. 만약 내가 수동으로 그런 다음 다시 문제가 없지만,이 기능을 자동으로 가지고 있어야합니다. 누군가 내가 이것을 해결하는 것을 도울 수 있다면 그것은 위대 할 것입니다!

+0

안녕 ..... 당신의 시트는 ... 스크립트를 볼 수 없습니다 수있게된다 .... – Vasim

+0

@Vasim 그것이 내가 여기에 스크립트를 게시 그렇게 보여 가져올 수 없습니다이다. – theworldismyoyster

답변

1

Range.breakapart()을 사용하면 열을 숨기기 전에 병합을 해제 할 수 있습니다. 작동 범위를 확보해야합니다.이 예에서는 Range.offset()을 사용하여 열을 선택합니다. customColumnsRanges 행에서 시트의 맨 아래까지 모든 셀을 선택한다는 점에 유의하십시오.

... 
    if (customColumns[0][i] == "") { 
     // Get a range containing just this column, and break apart any merges. 
     var columnRange = customColumnsRanges.offset(0,i,sheet.getMaxRows()-customColumnsRanges.getRow()); 
     columnRange.breakApart(); 
     sheet.hideColumns(column); 
     Logger.log('Hiding column ' + column); 
    } else { 
    ... 
관련 문제