Office js自定义格式

时间:2017-09-14 08:58:46

标签: javascript office-js

我编写了以下代码来使用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属性。

2 个答案:

答案 0 :(得分:2)

(修改我的答案来描述两种可能的解决方案,因为我不确定哪种情况与你想要达到的目标相匹配。)

解决方案1:当单元格值符合条件时突出显示单元格

在第一个场景中,我们假设您在活动工作表中有此表,并且您的目标是 突出显示值E 列中任何行的值在E列中介于1001和5000之间:

enter image description here

以下代码使用条件格式设置,当单元格值介于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));
        }
    });

此代码运行后,表格如下所示:

enter image description here

解决方案2:当行中的特定单元格值符合条件时突出显示整行

在下一个场景中,我们假设您在活动工作表中有此表,并且您的目标是 突出显示整行数据(列AE) 行E列中的值介于1001和5000之间:

enter image description here

以下代码使用条件格式设置,只要行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));
        }
    });

此代码运行后,表格如下所示:

enter image description here

答案 1 :(得分:0)

conditionalFormat.custom.rule是只读的。这意味着您无法创建对象并将其分配给conditionalFormat.custom.rule,因为您的代码正在尝试执行此操作。相反,您必须为规则的每个属性分配值。例如:

conditionalFormat.custom.rule.formula = '=IF(B8>INDIRECT("RC[-1]",0),TRUE)';

请注意,公式值必须是有效的Excel公式,而不是您使用的JavaScript表达式。