Excel 识别Office JS中的活动图表和选定图表元素

Excel 识别Office JS中的活动图表和选定图表元素,excel,charts,office-js,Excel,Charts,Office Js,我拼凑了一些JavaScript来标记图表中每个系列的最后一点(见下文)。这是VBA外接程序中常用函数的简化版本 我使用了让mychart=mysheet.charts.getItemAt(0)指定代码应在工作表上的第一个图表对象上运行。在用户选择的图表上运行代码会更有用 如何识别用户选择的图表(ActiveChart在VBA speak中) 类似地,我使用for(var-iseries=0;iseriestryCatch(labellaspoint)); //$(“#标记最后一个点”)。单击(

我拼凑了一些JavaScript来标记图表中每个系列的最后一点(见下文)。这是VBA外接程序中常用函数的简化版本

我使用了
让mychart=mysheet.charts.getItemAt(0)
指定代码应在工作表上的第一个图表对象上运行。在用户选择的图表上运行代码会更有用

  • 如何识别用户选择的图表(
    ActiveChart
    在VBA speak中)
  • 类似地,我使用
    for(var-iseries=0;iseries
    在图表中的所有系列上运行代码。在用户选择的特定系列上运行代码会更有用

  • 如何识别用户选择了图表中的哪个系列(与VBA中的
    TypeName(Selection)
    相关)
  • 这是我的Office JS代码:

        $("#run").click(() => tryCatch(labelLastPoint));
        //$("#label-last-point").click(labelLastPoint);
        async function labelLastPoint() {
            await Excel.run(async (context) => {
                let mysheet = context.workbook.worksheets.getActiveWorksheet();
                let mychart = mysheet.charts.getItemAt(0);
    
                let seriescollection = mychart.series;
                seriescollection.load("count");
                await context.sync();
                console.log("Number of Series: " + seriescollection.count);
                let nseries = seriescollection.count;
    
                for (var iseries = 0; iseries < nseries; iseries++) {
                    console.log("- Series Number " + iseries);
                    let myseries = seriescollection.getItemAt(iseries);
                    let pointcollection = myseries.points;
                    pointcollection.load("count");
                    await context.sync();
                    let npoints = myseries.points.count;
                    let mypoint = myseries.points.getItemAt(npoints - 1);
                    mypoint.hasDataLabel = true;
                    mypoint.dataLabel.showSeriesName = true;
                    mypoint.dataLabel.showValue = false;
                }
            });
        }
    
    $(“#运行”)。单击(()=>tryCatch(labellaspoint));
    //$(“#标记最后一个点”)。单击(标记点);
    异步函数labellasPoint(){
    等待Excel.run(异步(上下文)=>{
    让mysheet=context.workbook.worksheets.getActiveWorksheet();
    让mychart=mysheet.charts.getItemAt(0);
    让seriescollection=mychart.series;
    系列收集。加载(“计数”);
    wait context.sync();
    日志(“系列数:+seriescollection.count”);
    设nseries=seriescollection.count;
    对于(var-iseries=0;iseries
    据我所知,您正在寻找可能被称为“getSelectedChart”和“getSelectedSeries”的API方法。恐怕Office JS中没有这样做的API。但这是个好主意。请至少提出这个建议

    共享Office JS API中有一个getSelectedDataAsync方法,但它不支持图表或系列


    同时,在您的场景中,是否可以在任务窗格中有一个下拉列表,用户可以通过标题指定感兴趣的图表/系列

    Jon,我不知道这是否有用,但在这个例子中,ActiveChart是工作簿的一员:谢谢,Doug。这是非常古老的JavaScript(2004),我猜是从VB6一代开始的,我认为它只是从JavaScript运行COM。它不同于微软目前正在开发的新的Office JS API。谢谢,Rick。在过去一周的MVP峰会上,我与微软的一些人进行了交谈,并提出了同样的建议。实际上,我想要一个名为“getSelection”的函数,它更一般,意味着我们不需要为每个图表元素(如getSelectedAxis、getSelectedDataLabel、getSelectedLegendEntry等)使用新函数。这可以按照VBA的选择对象建模,我广泛使用它来确定用户选择了什么,因此我的代码将做什么..Rick-我曾想过使用某种列表框或下拉列表来让用户指示应该对哪个特定元素进行操作,事实上,我循环浏览了图表中的所有系列,以帮助我证明概念。但是,对于用户来说,更一般、更有用、更透明的是,代码可以知道选择了什么,并相应地采取行动。