[]
SpreadJS에서는 행 필터에 대해 다양한 작업을 수행할 수 있습니다.
사용자 정의 필터 항목을 생성하여 행 필터에 추가할 수 있습니다.
다음은 숫자 값이 10에서 50 사이인 항목만 표시하는 사용자 정의 필터를 생성하는 코드 예제입니다:
//사용자 정의 조건 생성
function CustomFilter(){
GC.Spread.Sheets.ConditionalFormatting.Condition.apply(this, arguments);
//this.conditionType("CustomFilter");
};
CustomFilter.prototype = new GC.Spread.Sheets.ConditionalFormatting.Condition();
CustomFilter.prototype.evaluate = function (evaluator, row, col) {
var value = evaluator.getValue(row, col);
if (value !== null && value >= 10 && value <= 50) {
//아래 조건들이 만족될 때만 True 반환
// (1)값을 입력
// (2)값이 10 미만이 아님
// (3)값이 50 초과 아님
return true;
} else {
return false;
}
};
// 워크북과 워크시트 구성
var spread = new GC.Spread.Sheets.Workbook(document.getElementById("ss"));
var activeSheet = spread.getActiveSheet();
activeSheet.setValue(0, 0, 10);
activeSheet.setValue(1, 0, 100);
activeSheet.setValue(2, 0, 50);
activeSheet.setValue(3, 0, 40);
activeSheet.setValue(4, 0, 80);
activeSheet.setValue(5, 0, 1);
activeSheet.setValue(6, 0, 65);
activeSheet.setValue(7, 0, 20);
activeSheet.setValue(8, 0, 30);
activeSheet.setValue(9, 0, 35);
//행 필터 설정
var rowFilter = new GC.Spread.Sheets.Filter.HideRowFilter(new GC.Spread.Sheets.Range(0, 0, 7, 1));
activeSheet.rowFilter(rowFilter);
rowFilter.addFilterItem(0, new CustomFilter());
rowFilter.filter(0);
RowFilterBase 클래스의 isFiltered , isRowFilteredOut , onFilter 등의 메서드를 사용하여 다양한 행 필터 상태를 가져올 수 있습니다.
다음 코드 예제는 행 또는 열이 필터링되었는지를 표시하는 버튼을 설정하는 방법을 보여줍니다.
Ask ChatGPT
$("#button1").click(function()
{
var rowFilter = spread.getActiveSheet().rowFilter();
if (rowFilter.isFiltered(0))
{
console.log("Row-filtering executed for Column1");
}
else
{
console.log("Row-filtering not executed for Column1");
}
})
RowFilterBase 클래스의 getFilterItems 등의 메서드를 사용하여 필터 항목을 가져오고 결과를 표시할 수 있습니다.
다음 코드 예제는 브라우저 콘솔에 필터 결과를 출력하는 방법을 보여줍니다.
$("#button1").click(function ()
{
var rowFilter = spread.getActiveSheet().rowFilter();
//*********************************************
// 만약 Column1이 필터링되지 않았다면 나가기
//*********************************************
if (!rowFilter.isFiltered(0))
{
return;
}
//*********************************************
// 필터된 문자열
//*********************************************
var filterItems = rowFilter.getFilterItems(0);
var str = "Filtered strings:";
filterItems.forEach(function (item)
{
str += " " + item.expected();
})
console.log(str);
console.log("");
//*********************************************
// 필터링되어 표시된(displayed) 행의 수
//*********************************************
var range = rowFilter.range;
var filteredInRows = [], filteredOutRows = [];
for (var i = range.row, last = range.row + range.rowCount; i < last; i++)
{
if (rowFilter.isRowFilteredOut(i))
{
filteredOutRows.push(i);
}
else
{
filteredInRows.push(i);
}
}
console.log("Number of Filtered-In (displayed) rows: " + filteredInRows.length);
console.log("");
// *********************************************
// 필터링되어 숨겨진(Hidden) 행의 수
// *********************************************
console.log("Number of Filtered-Out (hidden) rows: " + filteredOutRows.length);
console.log("");
filteredOutRows.forEach(function(item){
console.log("Filtered-Out (hidden) row index: " + item);
});
console.log("");
//*********************************************
// 필터링된(표시/숨김) 행 목록
//*********************************************
filteredOutRows.forEach(function(item){
console.log("Data of Filtered-Out (hidden) row: " + activeSheet.getValue(item, 0));
});
console.log("");
filteredInRows.forEach(function(item)
{
console.log("Data of Filtered-In (displayed) row: " + activeSheet.getValue(item, 0));
});
});
RowFilterBase의 filterButtonVisible 메서드를 사용하여 필터 표시 아이콘(필터 버튼)을 표시할지 여부를 설정할 수 있습니다.
기본값은 true 이며, false 로 설정하면 필터 아이콘이 숨겨집니다.
다음 코드 예제는 전용 버튼을 통해 필터 아이콘을 숨기거나 표시하는 방법을 보여줍니다.
Ask ChatGPT
$("#button1").click(function()
{
// filter 인디케이터 숨기기
var rowFilter = spread.getActiveSheet().rowFilter();
rowFilter.filterButtonVisible(0, false);
activeSheet.repaint();
});
$("#button2").click(function()
{
// filter 인디케이터 다시 표시
var rowFilter = spread.getActiveSheet().rowFilter();
rowFilter.filterButtonVisible(0, true);
activeSheet.repaint();
});
SpreadJS에서는 원래의 필터 범위를 넘어 필터 범위를 확장할지 여부를 선택할 수 있습니다.
allowAutoExtendFilterRange 속성을 true로 설정하면, 같은 열 또는 인접한 열에서 빈 셀을 만날 때까지 필터 범위를 확장합니다. 기본값은 false입니다.
또한, rowFilter의 extendedRange 속성을 사용하여 확장된 필터 범위를 가져올 수 있으며, 이 속성은 배열을 반환합니다. allowAutoExtendFilterRange 속성이 false로 설정되어 있으면, extendedRange 값은 GC.Spread.Sheets.Filter.RowFilterBase.range와 동일합니다.
다음 GIF 및 해당 코드 예제는 확장된 필터 범위의 사용법과 워크시트에서 확장된 범위를 가져오는 방법을 보여줍니다.
function AllowAutoExtend(spread, rowFilter) {
// allowAutoExtendFilterRange을 true로 설정
spread.options.allowAutoExtendFilterRange = true;
// 확장된 범위 가져오기
var extendedFilterRange = rowFilter.extendedRange;
// 반환 - row: 2, rowCount: 5, col: 0, colCount: 5
}
참고: 이 속성은 필터가 포함된 Excel 파일을 가져올 때
true
로 설정됩니다.
아래 표는 auto-extend filter range
가 true
로 설정되었을 때 발생할 수 있는 다양한 시나리오를 보여줍니다.
시나리오 | 예시 |
---|---|
필터가 생성되고 단일 셀만 선택된 경우, SpreadJS는 해당 범위 주변의 셀이 모두 비어 있을 때까지 필터 범위를 확장합니다. | |
필터가 생성된 후, SpreadJS는 원래 값 아래로 null 값이 나올 때까지 필터 범위를 확장합니다. | |
확장된 필터 범위 셀 중 하나의 값이 삭제되면, 필터 목록이 업데이트됩니다. | |
기본 필터 범위 셀의 값이 삭제되면, 필터 목록에 공백이 표시됩니다. | |
여러 열 필터가 생성된 경우, SpreadJS는 각 열의 값이 null이 되는 행까지 필터 범위를 자동 확장합니다. |