Excel Javascript API - 添加具有“类别轴”值的图表

时间:2017-01-27 18:38:05

标签: javascript excel charts office-js

我正在添加\通过以下JS调用将一个折线图插入Excel:

    var newSheet = ctx.workbook.worksheets.add();
    newSheet.activate();

    // populate grid
    // category (axis)
    var cell = newSheet.getCell(0, 0)
    ...

    // values (axis)
    cell = newSheet.getCell(0, 1)
    ...

    var range = newSheet.getUsedRange();
    newSheet.charts.add("Line", range);

我的"范围"数据如下所示:

2012  10
2013  20
2014  30
2015  40
2016  50

我遇到的问题是将每个列视为单个系列,并在图表中呈现2行。我只想要一行和Category Axis来包含年份。有谁知道这是否可行?

截图:

Example

1 个答案:

答案 0 :(得分:2)

克里斯,

用于创建图表的Excel的当前JavaScript API无法让您更好地控制Excel应如何构建图表的系列和轴。使用ChartCollection.add()方法时,您依赖于Excel推荐图表算法的“智能”,在这种特殊情况下,由于第一个答案不是您所期望的,因此可以回答它。

我们的API积压中有一个项目,可以为类似于其他Excel API的图表提供更细粒度的控制。目前我无法说明API何时可以使用。我鼓励您按照我们的open specification process进行提升,并有机会对我们的设计提供反馈。

作为针对您的特定情况的解决方法,我建议您尝试使用第一列的日期值而不是数字。您可以将列格式化为仅显示日期的年份部分:

async function run() {
try {
    await Excel.run(async (context) => {
        var sheet = context.workbook.worksheets.getActiveWorksheet();

        let data = [
            ["Year", "Measure"],
            ["2010-12-31", 10],
            ["2011-12-31", 20], 
            ["2012-12-31", 30], 
            ["2013-12-31", 40],
            ["2014-12-31", 50],
        ];
        let format = [
            ["@"],
            ["yyyy"],
            ["yyyy"],
            ["yyyy"],
            ["yyyy"],
            ["yyyy"]
        ];

        let categories = sheet.getRange("A1:A6");
        categories.numberFormat = format;
        var range = sheet.getRange("A1:B6");
        range.values = data;

        sheet.charts.add(Excel.ChartType.line, range, Excel.ChartSeriesBy.columns);

        await context.sync();
    });
}
catch (error) {
    OfficeHelpers.Utilities.log(error);
}

}

此代码段使用async / await以TypeScript编写,但很容易转换为JavaScript。

enter image description here