Я новичок в 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 (), когда он уже запущен, и я пытаюсь использовать код, уже сгенерированный 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.font.bold = false;
// Highlight the cell
cellToHighlight.format.font.bold = true;
$('#fa-output').append("<br>The highest value is " + highestValue);
})
.then(ctx.sync);
})
.catch(errorHandler);