尝试了以下从各种来源拼凑而成的代码,但它似乎没有起作用。我是否需要浏览每个单独的财产并逐个分配?
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);
答案 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的其余部分在发布时将保持不变。