Office js 如何通过Excel JavaScript API仅锁定专用单元格

Office js 如何通过Excel JavaScript API仅锁定专用单元格,office-js,Office Js,如文件所述,我试图只锁定一些单元格(在我的例子中是一列的所有单元格),但整个文档的所有单元格都被锁定,而不仅仅是范围内的单元格。我已经尝试只锁定一些单元格,如“D1:D5”,但所有单元格都被锁定,而不仅仅是这5个单元格 这是我的代码: function lockColumnHandler() { lockColumn("Sheet1", "D:D"); } function lockColumn(sheetName, columnRange) { Excel.run(funct

如文件所述,我试图只锁定一些单元格(在我的例子中是一列的所有单元格),但整个文档的所有单元格都被锁定,而不仅仅是范围内的单元格。我已经尝试只锁定一些单元格,如“D1:D5”,但所有单元格都被锁定,而不仅仅是这5个单元格

这是我的代码:

function lockColumnHandler() {
    lockColumn("Sheet1", "D:D");
}

function lockColumn(sheetName, columnRange) {
    Excel.run(function (ctx) {
        var sheet = ctx.workbook.worksheets.getItem(sheetName);
        var range = sheet.getRange(columnRange);

        if (range) {
            range.format.protection.locked = true;
        }

        sheet.protection.protect({
            allowAutoFilter: true,
            allowDeleteColumns: true,
            allowDeleteRows: true,
            allowFormatCells: true,
            allowFormatColumns: true,
            allowFormatRows: true,
            allowInsertColumns: true,
            allowInsertHyperlinks: true,
            allowInsertRows: true,
            allowPivotTables: true,
            allowSort: true
        });

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

如果我在Excel中创建一个新的工作表,用一些测试数据填充它,并运行以下代码,则范围columnRange中单元格的初始状态看起来是锁定的:

在新工作表中运行此代码的控制台输出为:


基于这些发现,我怀疑您描述的结果可能是由于新工作表中所有单元格的初始状态都已锁定(即,您认为您的代码只是锁定工作表中的某些单元格,但实际上,您的代码没有任何效果,因为工作表中的所有单元格都已默认锁定)。可能先尝试解锁工作表中的所有单元格,然后,仅显式锁定要锁定的单元格?

Excel中的默认状态是所有单元格都标记为已锁定(您可以右键单击Excel中的任何单元格,转到“格式单元格->保护”,您会发现默认情况下勾选了“锁定”)


因此,为了只锁定这些单元格,您必须解锁工作表中的所有单元格,除了要锁定的单元格。

啊,太好了。首先解锁所有单元,然后锁定专用单元。我从来没想到所有的单元格都会被默认锁定。谢谢Kim。你是对的!但是Philip的速度快了一点,所以他得到了积分。不用担心,我很高兴你得到了你需要的帮助!
function lockColumn(sheetName, columnRange) {

    Excel.run(function (ctx) {
        var sheet = ctx.workbook.worksheets.getItem(sheetName);
        var range = sheet.getRange(columnRange);

        if (range) {
            range.load(['address', 'format/protection/locked']);
            ctx.sync()
                .then(function () {
                    console.log(`The range address is: "${range.address}".`);
                    console.log('Initial value of range.format.protection.locked: ' + range.format.protection.locked);
                });
        };
        return ctx.sync();
    })
    .catch(errorHandler);
}