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

时间:2016-04-16 22:10:54

标签: office-addins excel-addins 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);

2 个答案:

答案 0 :(得分:3)

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

当您访问类似range.format.fill.color的内容时,如果范围格式相同,它将为您返回一个值;如果范围有多种颜色,则为“null”,因此没有单一的答案可以返回。

所以现在,您需要遍历每个单元格(range.getCell(i,j))并将它们放入您自己的2D数组中,分别加载每个范围的值,然后同步,然后使用该信息单独应用格式。应该可以在相当小的范围内实现,但我们确实认识到有更多目标API可以提供更好的解决方案,

~Michael Zlatkovsky,Office Extensibility团队的开发人员,MSFT

答案 1 :(得分:0)

有一组API可以执行一组set / get Range格式。但是它们仍处于预览状态。如果您引用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导入到脚本实验室

PS:请忽略@odata.type属性,它可能是临时的。但是,预计该API的其余部分在发布时将保持不变。