안녕하세요 그레이프시티입니다.
틀고정 기능은 시트에 적용되는 것이기 때문에 피벗의 헤더 부분을 틀고정하는 기능을 지원하지는 않습니다.
다만, PivotTableChanged 이벤트와 피벗테이블의 범위와 필드의 개수를 가져와 계산하여 틀고정을 할 수 있습니다.
아래 샘플과 도움말을 참고해 주시기 바랍니다.
window.onload = function () {
var spread = new GC.Spread.Sheets.Workbook(_getElementById('ss'), { sheetCount: 2 });
initSpread(spread);
var pivotLayoutSheet = spread.getSheet(0);
initPivotTable(pivotLayoutSheet);
};
function initSpread(spread) {
spread.suspendPaint();
let sheet = spread.getSheet(1);
sheet.name("DataSource");
sheet.setRowCount(117);
sheet.setColumnWidth(0, 120);
sheet.getCell(-1, 0).formatter("YYYY-mm-DD");
sheet.getRange(-1,4,0,2).formatter("$ #,##0");
sheet.setArray(0, 0, pivotSales);
let table = sheet.tables.add('tableSales', 0, 0, 117, 6);
for(let i=2;i<=117;i++)
{
sheet.setFormula(i-1,5,'=D'+i+'*E'+i)
}
table.style(GC.Spread.Sheets.Tables.TableThemes["none"]);
let sheet0 = spread.getSheet(0);
sheet0.name("PivotLayout");
spread.resumePaint();
sheet0.bind(GC.Spread.Sheets.Events.PivotTableChanged, function (sender, args) {
if(args.type == "fieldChanged") {
setTimeout(function() { //피벗테이블 범위가 변경되기까지 시간을 주기 위해
var pivot = sheet0.pivotTables.get(args.pivotTableName);
sheet0.frozenColumnCount(pivot.getRange().content.col + pivot.getFieldsByArea(GC.Spread.Pivot.PivotTableFieldType.rowField).length);
sheet0.frozenRowCount(pivot.getRange().content.row + pivot.getFieldsByArea(GC.Spread.Pivot.PivotTableFieldType.columnField).length+1);
}, 100);
}
});
}
function initPivotTable(sheet) {
let myPivotTable = sheet.pivotTables.add("myPivotTable", "tableSales", 1, 1, GC.Spread.Pivot.PivotTableLayoutType.outline, GC.Spread.Pivot.PivotTableThemes.light8);
myPivotTable.suspendLayout();
myPivotTable.options.showRowHeader = true;
myPivotTable.options.showColumnHeader = true;
myPivotTable.add("salesperson", "Salesperson", GC.Spread.Pivot.PivotTableFieldType.rowField);
myPivotTable.add("car", "Cars", GC.Spread.Pivot.PivotTableFieldType.rowField);
myPivotTable.add("date", "Date", GC.Spread.Pivot.PivotTableFieldType.columnField);
let groupInfo = { originFieldName: "date", dateGroups: [{ by: GC.Pivot.DateGroupType.quarters }] };
myPivotTable.group(groupInfo);
myPivotTable.add("total", "Totals", GC.Spread.Pivot.PivotTableFieldType.valueField, GC.Pivot.SubtotalType.sum);
var panel = new GC.Spread.Pivot.PivotPanel("myPivotPanel", myPivotTable, document.getElementById("panel"));
panel.sectionVisibility(GC.Spread.Pivot.PivotPanelSection.fields + GC.Spread.Pivot.PivotPanelSection.area);
myPivotTable.resumeLayout();
myPivotTable.autoFitColumn();
//초기 틀고정 설정
sheet.frozenColumnCount(myPivotTable.getRange().content.col + myPivotTable.getFieldsByArea(GC.Spread.Pivot.PivotTableFieldType.rowField).length);
sheet.frozenRowCount(myPivotTable.getRange().content.row + myPivotTable.getFieldsByArea(GC.Spread.Pivot.PivotTableFieldType.columnField).length+1);
}
function _getElementById(id) {
return document.getElementById(id);
}
감사합니다.