如何在 office.js 中复制范围格式?

How to copy range formatting in office.js?

尝试了以下我从各种来源拼凑而成的代码,但似乎无法正常工作。我是否需要遍历每个人 属性 并一一分配?

Excel.run(function (ctx) {
        var worksheet = ctx.workbook.worksheets.getItem(worksheetName);
        var range = worksheet.getUsedRange();
        range.load(["formulasLocal", "address", "format/*", "format/fill", "format/borders", "format/font"]);

        var newWorksheet = ctx.workbook.worksheets.add(worksheetName + " -Copy");
        return ctx.sync().then(function () {
            var newAddress = range.address.substring(range.address.indexOf("!") + 1);
            newWorksheet.getRange(newAddress).values = range.formulasLocal;
            newWorksheet.getRange(newAddress).format = range.format;
        }).then(ctx.sync);

不幸的是,目前不支持该方案(尽管它在我们的积压工作中)。您可以获取数组形式的值、文本和公式,但不能获取格式属性。

当您访问 range.format.fill.color 之类的内容时,如果范围格式相同,它将 return 为您提供一个值;和 "null" 如果范围有多种颜色,因此 return.

没有单一答案

所以现在,您需要遍历每个单元格 (range.getCell(i,j)) 并将它们放入您自己的二维数组中,单独加载每个范围的值,然后同步,然后使用该信息单独应用格式化回来。在相当小的范围内应该是可能的,但我们确实意识到,使用更有针对性的 API 可能会有更好的解决方案,

~ Michael Zlatkovsky,Office 可扩展性团队开发人员,MSFT

有一组API做一批set/getRange格式。但它们仍处于预览阶段。如果您引用 Beta CDN,您可以在 build#16.0.11328.20158(win32) 或 Excel 在线使用它们。 这是获取范围格式并设置为另一个范围的简单示例。

var actualData = rangeSrc.getCellProperties({
 format: {
    font: {
           bold: true,
           color: true,
           italic: true,
           name: true,
           underline: true,
           size: true,
           strikethrough: true,
           subscript: true,
           superscript: true,
           tintAndShade: true
    }
 }

});

如果您想查看完整示例,可以将以下内容gist导入 Script Lab

PS:请忽略@odata.type 属性,它可能是暂时的。但 API 的其余部分预计在发布时不会发生变化。