我是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 = "<table>"; /* for (var i = 0; i < sourceRange.rowCount; i++) { table += "<tr>"; for (var j = 0; j < sourceRange.columnCount; j++) { table += "<td>" + sourceRange.values[i][j] + "</td>"; } table += "</tr>"; } table += "</table>"; */ //$('#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制作插件。我遇到了一件事情,似乎很容易,但事实并非如此。我只是想获取...
您的代码中有很多注释掉的代码,很难阅读。
无论如何,这是预期的行为。要读取工作簿中对象的属性,必须先load()然后再sync()。加载和同步将工作簿中的属性值带到外接程序中的JavaScript,以便您可以读取它。您的代码正在尝试读取尚未首先加载的属性。以下是一个简单的示例: