我编写了以下代码来使用Office JS实现自定义条件格式 -
function customFormatting() {
// Run a batch operation against the Excel object model
Excel.run(function (ctx) {
// Create a proxy object for the active worksheet
var sheet = ctx.workbook.worksheets.getActiveWorksheet();
//Queue a command to write the sample data to the specified range
//in the worksheet and bold the header row
var range = sheet.getRange("A2:E9");
var conditionalFormat = range.conditionalFormats.add(Excel.ConditionalFormatType.custom);
conditionalFormat.custom.format.fill.color = "red";
conditionalFormat.custom.rule = {formula:">1001 && <5000"};
//Run the queued commands, and return a promise to indicate task completion
return ctx.sync();
})
.then(function () {
app.showNotification("Success");
console.log("Success!");
})
.catch(function (error) {
// Always be sure to catch any accumulated errors that bubble up from the Excel.run execution
app.showNotification("Error: " + error);
console.log("Error: " + error);
if (error instanceof OfficeExtension.Error) {
console.log("Debug info: " + JSON.stringify(error.debugInfo));
}
});
}
运行代码时出现以下错误 -
错误:TypeError:尝试分配给readonly属性。
答案 0 :(得分:2)
(修改我的答案来描述两种可能的解决方案,因为我不确定哪种情况与你想要达到的目标相匹配。)
解决方案1:当单元格值符合条件时突出显示单元格
在第一个场景中,我们假设您在活动工作表中有此表,并且您的目标是 突出显示值E 列中任何行的值在E列中介于1001和5000之间:
以下代码使用条件格式设置,当单元格值介于1001和5000之间时,将E列中的填充颜色设置为黄色。
Excel.run(function (ctx) {
var sheet = ctx.workbook.worksheets.getActiveWorksheet();
var range = sheet.getRange("E2:E9");
var conditionalFormat = range.conditionalFormats.add(Excel.ConditionalFormatType.cellValue);
conditionalFormat.cellValue.format.fill.color = "yellow";
conditionalFormat.cellValue.rule = { formula1: "=1001", formula2: "=5000", operator: "Between" };
return ctx.sync()
.then(function () {
//app.showNotification("Success");
console.log("Success!");
})
})
.catch(function (error) {
//app.showNotification("Error: " + error);
console.log("Error: " + error);
if (error instanceof OfficeExtension.Error) {
console.log("Debug info: " + JSON.stringify(error.debugInfo));
}
});
此代码运行后,表格如下所示:
解决方案2:当行中的特定单元格值符合条件时突出显示整行
在下一个场景中,我们假设您在活动工作表中有此表,并且您的目标是 突出显示整行数据(列AE) 行E列中的值介于1001和5000之间:
以下代码使用条件格式设置,只要行E列中的值介于1001和5000之间,就会将整个数据行(列A-E)的填充颜色设置为黄色。
Excel.run(function (ctx) {
var sheet = ctx.workbook.worksheets.getActiveWorksheet();
var range = sheet.getRange("A2:E9");
var conditionalFormat = range.conditionalFormats.add(Excel.ConditionalFormatType.custom);
conditionalFormat.custom.format.fill.color = "yellow";
conditionalFormat.custom.rule.formula = '=IF((AND($E2>1001, $E2<5000)),TRUE)';
return ctx.sync()
.then(function () {
//app.showNotification("Success");
console.log("Success!");
})
})
.catch(function (error) {
//app.showNotification("Error: " + error);
console.log("Error: " + error);
if (error instanceof OfficeExtension.Error) {
console.log("Debug info: " + JSON.stringify(error.debugInfo));
}
});
此代码运行后,表格如下所示:
答案 1 :(得分:0)
conditionalFormat.custom.rule是只读的。这意味着您无法创建对象并将其分配给conditionalFormat.custom.rule,因为您的代码正在尝试执行此操作。相反,您必须为规则的每个属性分配值。例如:
conditionalFormat.custom.rule.formula = '=IF(B8>INDIRECT("RC[-1]",0),TRUE)';
请注意,公式值必须是有效的Excel公式,而不是您使用的JavaScript表达式。