获取一定范围的单元格officejs的填充颜色

问题描述 投票:0回答:1

我是office.js的新手,正在制作插件,我正在尝试为Excel制作插件。我遇到了一件事情,似乎很容易,但事实并非如此。我只是想获取所选单元格的背景色。据我所知,我将需要遍历每个选定的单元格并分别检查fill.color值,这很好,除了尝试读取此属性时始终出现错误。]

Error PropertyNotLoaded: The property 'color' is not available. Before reading the property's value, call the load method on the containing object and call "context.sync()" on the associated request context.

我不太明白为什么当我已经运行了context.sync()时,为什么我必须运行context.sync(),而我正在尝试使用Visual Studio已经生成的代码作为插件。] >

错误令人困惑,因为我能够像这样设置颜色而没有任何问题。这是我添加的试图获得填充颜色的代码。第一行被注释掉,但是向选定的单元格添加了橙色填充没问题。我仅添加了此内容以查看是否可以读出我已经设置的值。我正在尝试为选定范围获取用户定义的填充。第二行是引发错误的位置。

//sourceRange.getCell(i, j).format.fill.color = "orange"; // this sets the color no problem when uncommented
$('#fa-output').append("color: " + sourceRange.getCell(i,j).format.fill.color + "<br>"); //this is where it can't get the fill color

我使用的是Visual Studio生成的示例,它将随机生成9个随机数的单元格,并突出显示所选范围内的最高数字。这是此方法的完整代码:

// Run a batch operation against the Excel object model
    Excel.run(function (ctx) {
        // Create a proxy object for the selected range and load its properties
        var sourceRange = ctx.workbook.getSelectedRange().load("values, rowCount, columnCount, format");

        // Run the queued-up command, and return a promise to indicate task completion
        return ctx.sync()
            .then(function () {
                var highestRow = 0;
                var highestCol = 0;
                var highestValue = sourceRange.values[0][0];

                // Find the cell to highlight
                for (var i = 0; i < sourceRange.rowCount; i++) {
                    for (var j = 0; j < sourceRange.columnCount; j++) {

                        //sourceRange.getCell(i, j).format.fill.color = "orange"; // this sets the color no problem when uncommented
                        $('#fa-output').append("color: " + sourceRange.getCell(i,j).format.fill.color + "<br>"); //this is where it can't get the fill color

                        if (!isNaN(sourceRange.values[i][j]) && sourceRange.values[i][j] > highestValue) {
                            highestRow = i;
                            highestCol = j;
                            highestValue = sourceRange.values[i][j];
                        }
                    }
                }

                cellToHighlight = sourceRange.getCell(highestRow, highestCol);
                //sourceRange.worksheet.getUsedRange().format.fill.clear();
                sourceRange.worksheet.getUsedRange().format.font.bold = false;

                // Highlight the cell
                //cellToHighlight.format.fill.color = "orange";
                cellToHighlight.format.font.bold = true;

                $('#fa-output').append("<br>The highest value is " + highestValue);

                var table = "&lt;table&gt;";

                /*
                for (var i = 0; i < sourceRange.rowCount; i++) {
                    table += "&lt;tr&gt;";
                    for (var j = 0; j < sourceRange.columnCount; j++) {
                        table += "&lt;td&gt;" + sourceRange.values[i][j] + "&lt;/td&gt;";
                    }
                    table += "&lt;/tr&gt;";
                }

                table += "&lt;/table&gt;";
                */

                //$('#fa-output').html(table);
                //$('#fa-output').append(" fill color: " + cellToHighlight.format.fill.color);
                /*
                var rangeFill = sourceRange.worksheet.getUsedRange().format.fill;
                rangeFill.load('color');
                return ctx.sync().then(function () {
                    $('#fa-output').append('<br>' + rangeFill.color);
                });
                */

            })
            .then(ctx.sync);
    })
    .catch(errorHandler);

我是office.js的新手,正在制作插件,我正在尝试为Excel制作插件。我遇到了一件事情,似乎很容易,但事实并非如此。我只是想获取...

excel office-js office-addins excel-addins
1个回答
0
投票

您的代码中有很多注释掉的代码,很难阅读。

无论如何,这是预期的行为。要读取工作簿中对象的属性,必须先load()然后再sync()。加载和同步将工作簿中的属性值带到外接程序中的JavaScript,以便您可以读取它。您的代码正在尝试读取尚未首先加载的属性。以下是一个简单的示例:

© www.soinside.com 2019 - 2024. All rights reserved.