我正在通过以下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);
我的"range“数据如下所示:
2012 10
2013 20
2014 30
2015 40
2016 50
我遇到的问题是,每一列都被视为一个单独的系列,并且在图表中呈现了两行。我只想要一行和Category Axis包含年份。有没有人知道这是否可能?
截图:
发布于 2017-01-28 23:20:22
克里斯,
当前用于创建图表的Excel并不能让您很好地控制JavaScript应该如何构造图表的序列和轴。当使用ChartCollection.add()方法时,您依赖于Excel推荐图表算法的“智能”,在这种情况下,它作为第一个答案出现的答案并不是您所期望的。
我们的API backlog中有一项为图表提供了更细粒度的控制,类似于其他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。
雅各布
https://stackoverflow.com/questions/41900822
复制