如何在 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 的其余部分预计在发布时不会发生变化。
尝试了以下我从各种来源拼凑而成的代码,但似乎无法正常工作。我是否需要遍历每个人 属性 并一一分配?
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 的其余部分预计在发布时不会发生变化。