【问题标题】:How to copy range formatting in office.js?如何在 office.js 中复制范围格式?
【发布时间】:2016-04-16 22:10:53
【问题描述】:

尝试了以下我从各种来源拼凑而成的代码,但它似乎不起作用。我是否需要检查每个单独的属性并一一分配?

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);

【问题讨论】:

    标签: office-addins excel-addins office-js


    【解决方案1】:

    很遗憾,目前不支持该场景(尽管它在我们的待办列表中)。您可以将值、文本和公式作为数组获取,但不能获取格式属性。

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

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

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

    【讨论】:

    • 感谢您的回答。我探索新 API 的次数越多,结果就越不可用。没有添加工作簿,没有复制工作表,甚至不能复制格式。这些都是非常基础的操作,不包括在内真是令人费解。
    • 对于添加工作簿,这是一个已知的差距,但以跨平台的方式很难做到。我们有一些想法,它肯定在积压中,但我承认它不是最重要的。您提到的另外两个——应用格式和复制工作表——在我们继续扩展 API 表面积时处于待办事项的顶部。随时通过officespdev.uservoice.com/forums/224641-general/category/… 提出建议或投票
    • 这方面有什么更新吗?我们是否有复制格式和/或重复的工作表?
    • 还没有更新。我无法评论/承诺何时完成,但两者都是我们计划很快解决的重要场景
    • 这方面有什么更新吗?新的api越来越好,但我还在等待多范围格式化……
    【解决方案2】:

    有一组 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导入Script Lab

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多