[]
사용자 정의 이름은 시트 내 정보를 나타내는 식별자로, 셀 범위나 수식을 참조할 수 있습니다.
사용자 정의 이름을 정의한 후 수식에서 해당 이름을 사용할 수 있으며, 수식을 계산할 때 사용자 정의 이름의 값이 참조되고 계산됩니다. 사용자 정의 이름을 만들려면 addCustomName 메서드를 사용합니다.
다음 코드 샘플은 사용자 정의 이름을 생성하는 예입니다:
activeSheet.setValue(0, 0, 1);
activeSheet.setValue(0, 1, 2);
activeSheet.setValue(0, 2, 3);
// isReadOnly를 true로 설정하여 읽기 전용 사용자 정의 이름 추가
activeSheet.addCustomName("customName1","=12", 0, 0, 'readonly', true);
activeSheet.addCustomName("customName2","Average(20,45)", 0, 0);
activeSheet.addCustomName("customName3", "=$B$1:$C$1", 0, 0);
activeSheet.setFormula(1, 0, "customName1");
activeSheet.setFormula(1, 1, "customName2");
activeSheet.setFormula(1, 2, "sum(customName3)");
SpreadJS에서는 읽기 전용 사용자 정의 이름을 SpreadJS Designer의 이름 관리자(Name Manager) 대화상자에서 수정하거나 삭제할 수 없습니다. 읽기 전용 사용자 정의 이름을 선택하면 편집 및 삭제 버튼이 비활성화되고, 더블 클릭해도 아무런 반응이 없습니다. 읽기 전용 여부는 API를 통해서만 설정 또는 변경할 수 있습니다.
기존 사용자 정의 이름의 수식, 이름, 주석 등을 수정하려면 NameInfo 클래스의 set
메서드를 사용합니다.
다음 코드 샘플은 사용자 정의 이름 정보를 업데이트하는 방법을 보여줍니다:
// 사용자 정의 이름을 변경하면 모든 참조된 수식이 다시 계산됩니다.
activeSheet.getCustomName("customName2").set("updatedName");
시트 이름이 포함되지 않은 사용자 정의 이름 수식은 시트에 사용자 정의 이름이 없을 경우 spread 인스턴스의 사용자 정의 이름을 사용하도록 업데이트됩니다.
다음 코드 샘플은 spread의 사용자 정의 이름을 사용하는 방법을 보여줍니다:
spread.sheets[0].setFormula(0, 0, "=customName1+1");
spread.sheets[0].setFormula(1, 0, "=Sheet1!customName1+1");
spread.addCustomName("customName1", "111"); // A1 셀에는 111이 표시되고, A2 셀은 #NAME! 오류 유지
spread.getCustomName("customName1").set("customUpdateName1"); // A1 := bbb+1, A2 := Sheet1!customName1+1
그러나 업데이트된 사용자 정의 이름이 이미 존재하는 경우에는 ‘Invalid custom name’ 오류가 발생합니다. 예를 들어:
activeSheet.addCustomName("updatedName", "222");
activeSheet.getCustomName("customName2").set("updatedName");
SpreadJS에서 사용자 정의 이름 정보를 업데이트할 수 있는 다양한 시나리오는 다음과 같습니다:
이전 이름이 수식에서 사용되지 않고 새 이름이 수식에서 참조되는 경우 set
이후 새 이름이 참조된 셀 수식이 다시 계산됩니다. 예:
activeSheet.setFormula(2, 0, "updatedName+1"); // 수식 결과는 #NAME!
activeSheet.getCustomName("customName1").set("updatedName"); // 수식 결과는 13
수식에서 새 이름과 이전 이름이 모두 참조되는 경우 예:
// 'Both the current name and new name are referenced in cell formulas' 예외가 발생합니다.
activeSheet.setFormula(1, 0, "customName1");
activeSheet.setFormula(1, 1, "updatedName");
activeSheet.getCustomName("customName1").set("updatedName");
수식을 업데이트하면서 사용자 정의 이름을 변경하는 경우 예:
activeSheet.getCustomName("customName2").set("updatedName","SUM(20,45)");
기준 행 및 기준 열과 함께 사용자 정의 이름 수식을 업데이트하고 주석을 업데이트하는 경우 예:
activeSheet.getCustomName("customName2").set(null,"=A1", 0,1, "the cell adjacent to the upper left corner");
사용자 정의 이름 주석을 업데이트하는 경우 예:
activeSheet.addCustomName("customName4", "=$A$1");
activeSheet.getCustomName("customName4").set(null, null, null, null, "the A1 cell in current sheet");
다른 사용자 정의 이름에서 사용 중인 사용자 정의 이름을 업데이트하는 경우 예:
activeSheet.addCustomName("customName4", "=$A$1");
activeSheet.addCustomName("customName5", "=customName4+1");
activeSheet.getCustomName("customName4").set("customName6", "=$C$2", null, null); // customName5는 "=customName6+1"로 바뀜
이전 이름은 사용되지 않고 새 이름은 사용 중인 경우, 다른 사용자 정의 이름에서 사용 중인 사용자 정의 이름을 업데이트하는 경우 예:
activeSheet.addCustomName("customName4", "=$A$1");
activeSheet.addCustomName("customName5", "=customName6+1");
activeSheet.getCustomName("customName4").set("customName6", "=$D$2", null, null); // customName4는 customName6으로 변경됨
참고: SpreadJS는 수식 내 사용자 정의 이름을 통합된 workbook 기준으로 자동 변경하지 않습니다. (시트 간 자동 변환 없음)