Office.js Excel范围getRow提供错误的范围地址

时间:2016-11-17 16:16:46

标签: javascript excel office365 office-js

在我的Excel选项卡窗格中,我想要仅根据活动的选定行从范围中获取一些行。

最初我的数据位于“Sheet1!H5:I16”,我只在工作表中选择没有表f.e.的行。 “Sheet 1中8:10”

为了检测选定的行,我得到了选择范围并加载了一些选项:

Excel.run(function (ctx) { 
    var selectedRange = ctx.workbook.getSelectedRange();
    selectedRange.load(['address', 'rowIndex', 'rowCount']);
    return ctx.sync().then(function() {
            console.log(selectedRange.address);
    });
});

它给我地址“Sheet1!8:10”和selectedRange.rowIndex = 7和selectedRange.rowCount = 3

现在我从选择中减去我的范围行:

var subsIndex = selectedRange.rowIndex - 5 // 5 is start index H5 

在这里,我的行在数据范围rowIndex中,它是3.

再次:对于整个工作表我的rowIndex为7,为了选择,与我的数据范围相交,行索引为3.

现在我想从整个数据Sheet1得到第一行内部数据范围rowIndex(它必须是Sheet1!H8:I10)!H5:I16仅基于选定的行(selectedRange.rowIndex = 7和selectedRange.rowCount = 3 ):

Excel.run(function (ctx) { 
    var sheetName = "Sheet1";
    var rangeAddress = "H5:I16"; // my whole data range
    var range = ctx.workbook.worksheets.getItem(sheetName).getRange(rangeAddress).getRow(subsIndex ); //try to get row number 3
    range.load('address');
    return ctx.sync().then(function() {
        console.log(range.address); // gives me Sheet1!H5:I16 ??? 
    });
});

为什么getRange(3)只给我整个范围的地址Sheet1!H5:I16按索引3输入行的地址:Sheet1!H8:I8?

enter image description here

橙色:数据范围

红色:需要的行

1 个答案:

答案 0 :(得分:0)

我不确定我是否完全按照你的方案。但我认为以下内容将起作用(实际上,并不需要您加载行索引等):

return Excel.run(function (ctx) {
    var selection = ctx.workbook.getSelectedRange();
    selection.format.fill.color = "purple";
    var range = selection.getRow(3);
    range.format.fill.color = "yellow"; 
    range.load('address');
    return ctx.sync()
        .then(function() {
            console.log(range.address);
        })
        .then(ctx.sync);
}).catch(console.log);

enter image description here