>source

드롭 다운 목록에서 차트를 선택할 수있는 "차트"시트에 "사용자 인터페이스"를 만들려고합니다. 그러면 해당 드롭 다운 목록 바로 아래에 표시됩니다.

결국 다른 "차트 데이터"시트에 수많은 차트가있을 것이므로 데이터 시트에서 차트 시트로 차트를 앞뒤로 이동하는 것이 좋습니다. 아직 할 수 있는지 확실하지 않습니다.

내 문제는 모호한 ID 대신 이름으로 스크립트에서 차트를 참조하는 방법을 찾는 것입니다.

나는 Chart Class 등을 모두 통과했으며 이것을 할 방법이 없습니다. 내가 뭔가를 놓친 적이 있습니까, 아니면 이것에 접근하는 다른 방법이 있습니까?

  • 답변 # 1

    나는 당신의 목표를 다음과 같이 믿습니다.

    에서 My issue is finding a way to reference a Chart in script by Name, instead of its obscure ID. , 특정 이름을 사용하여 특정 차트를 검색하려고합니다.

    이 답변의 샘플 스크립트에서는 차트 제목이 특정 이름으로 사용됩니다.

    샘플 스크립트 :

    시트 이름을 설정하십시오.

    const ss = SpreadsheetApp.getActiveSpreadsheet();
    const chartObj = ss.getSheetByName("Sheet1").getCharts().reduce((o, c) => Object.assign(o, {[c.getOptions().get("title")]: c}), {});
    
    

    이를 통해 다음과 같이 차트 제목을 사용하여 차트 개체를 검색 할 수 있습니다.

    chartObj["###chart title###"]

    물론 차트 제목 대신 다른 특정 이름을 지정할 수 있습니다. 다음 샘플 스크립트에서는 차트 제목에 해당하는 특정 이름이 키로 사용됩니다.

     const chartNames = {"sampleChartTitle": "sampleName1",,,};
      const ss = SpreadsheetApp.getActiveSpreadsheet();
      const chartObj = ss.getSheetByName("chartSample").getCharts().reduce((o, c) => Object.assign(o, {[chartNames[c.getOptions().get("title")]]: c}), {});
    
    

    이 경우 chartObj["sampleChartTitle"] 차트 제목에 대한 차트 개체입니다. "sampleName1" .

    추가 1 :

    귀하의 답장을 통해 Google 스프레드 시트의 모든 시트에서 모든 차트를 검색하려고한다는 것을 확인했습니다. 이를 위해 다음 샘플 스크립트는 어떻습니까?

    샘플 스크립트 1 :

    const ss = SpreadsheetApp.getActiveSpreadsheet();
    const chartObj = ss.getSheets().reduce((o1, sheet) => {
      o1[sheet.getSheetName()] = sheet.getCharts().reduce((o2, c) => Object.assign(o2, {[c.getOptions().get("title")]: c}), {});
      return o1;
    }, []);
    
    

    이 경우 차트는 다음 방법으로 검색 할 수 있습니다. chartObj["sheet name"]["chart title"] .

    샘플 스크립트 2 :

    for 루프를 사용하여 샘플 스크립트 1을 수정하면 다음과 같이됩니다. 이 샘플 스크립트 2에서 결과 값은 샘플 스크립트 1과 동일합니다.

    const ss = SpreadsheetApp.getActiveSpreadsheet();
    const sheets = ss.getSheets();
    const chartObj = {};
    for (let i = 0; i < sheets.length; i++) {
      const charts = sheets[i].getCharts();
      const temp = {};
      for (let j = 0; j < charts.length; j++) {
        const chart = charts[j];
        temp[chart.getOptions().get("title")] = chart;
      }
      chartObj[sheets[i].getSheetName()] = temp;
    }
    
    

    추가 2 :

    위의 스크립트에서 차트 개체를 검색 할 수 있습니다. chartObj[sheetName][chartTitle] . 그러나 귀하의 회신을 통해 시트 이름과 차트 제목에서 차트 개체를 검색하는 함수를 만들고 싶다는 것을 이해했습니다. 이를 위해 다음 스크립트는 어떻습니까?

    function sample(sheetName, chartTitle) {
      const ss = SpreadsheetApp.getActiveSpreadsheet();
      const sheet = ss.getSheetByName(sheetName);
      if (!sheet) return null;
      const charts = sheet.getCharts();
      for (let j = 0; j < charts.length; j++) {
        const chart = charts[j];
        if (chart.getOptions().get("title") == chartTitle) {
          return chart;
        }
      }
      return null;
    }
    
    

    이 경우 다음을 사용하여 차트 개체를 검색 할 수 있습니다. sample(sheetName, chartTitle) .

관련 자료

  • 이전 yii2 - 알 수없는 메서드 호출 오류 - omgdef \ multilingual \ multilingualquery :: sort ()?
  • 다음 azure - 나머지 API의 출력을 논리 앱의 다른 나머지 API에 대한 입력으로 사용하는 방법