如何使用 office.js 命名和引用 Excel 范围
How to name and reference an Excel range using office.js
我正在使用 office.js 库开发一个 Excel 加载项,需要创建一些命名范围以便稍后跟踪和访问。
但是根据 API 文档:
命名项目集合:https://github.com/OfficeDev/office-js-docs/blob/master/reference/excel/nameditemcollection.md
命名项目:https://github.com/OfficeDev/office-js-docs/blob/master/reference/excel/nameditem.md
没有创建命名项的方法。
有没有办法使用 office.js 命名和引用 Excel 范围?谢谢
无法命名 Excel 到 Office.js
中的范围。只有用户可以命名范围,通过 Excel UI.
好消息是有不同的方法可以实现相同的目标:
如果要维护对范围的引用,则无需命名;它已经有了像 Sheet1!A1:B10
.
这样的名称
如果你想保持对范围的引用,即使用户 adds/deletes rows/columns 在它之前或里面,使用 Binding:
var myBindings = Office.context.document.bindings;
var myAddress = "Sheet1!A1:B10";
myBindings.addFromNamedItemAsync(myAddress, "matrix", {id:"myBind"}, function(result){});
然后当你想稍后访问范围时,你可以:
Excel.run(function (ctx) {
var foundBinding = ctx.workbook.bindings.getItem("myBind");
var myRange = foundBinding.getRange();
myRange.load('values');
return ctx.sync().then(function() {
console.log(myRange.values);
});
});
-Michael Saunders,Office 插件项目经理
Excel.NamedItemCollection 提供了一个生成命名引用的 add() 方法
async function addNameToHeader() {
await Excel.run(async(context) => {
const sheet = context.workbook.worksheets.getItem("Sample");
const headerRange = sheet.getRange("A1:D1");
sheet.names.add("ExpensesHeader", headerRange);
const namedItems = sheet.names.load("name, type");
await context.sync();
});
}
async function formatRangeByName() {
await Excel.run(async(context) => {
const sheet = context.workbook.worksheets.getItem("Sample");
const headerRowName = sheet.names.getItemOrNullObject("ExpensesHeader");
headerRowName.load();
await context.sync();
if (headerRowName.value) {
const headerRange = headerRowName.getRange();
headerRange.format.fill.color = "red";
} else {
console.log("No named item created for the range.");
}
await context.sync();
});
}
我正在使用 office.js 库开发一个 Excel 加载项,需要创建一些命名范围以便稍后跟踪和访问。
但是根据 API 文档:
命名项目集合:https://github.com/OfficeDev/office-js-docs/blob/master/reference/excel/nameditemcollection.md
命名项目:https://github.com/OfficeDev/office-js-docs/blob/master/reference/excel/nameditem.md
没有创建命名项的方法。
有没有办法使用 office.js 命名和引用 Excel 范围?谢谢
无法命名 Excel 到 Office.js
中的范围。只有用户可以命名范围,通过 Excel UI.
好消息是有不同的方法可以实现相同的目标:
如果要维护对范围的引用,则无需命名;它已经有了像 Sheet1!A1:B10
.
如果你想保持对范围的引用,即使用户 adds/deletes rows/columns 在它之前或里面,使用 Binding:
var myBindings = Office.context.document.bindings;
var myAddress = "Sheet1!A1:B10";
myBindings.addFromNamedItemAsync(myAddress, "matrix", {id:"myBind"}, function(result){});
然后当你想稍后访问范围时,你可以:
Excel.run(function (ctx) {
var foundBinding = ctx.workbook.bindings.getItem("myBind");
var myRange = foundBinding.getRange();
myRange.load('values');
return ctx.sync().then(function() {
console.log(myRange.values);
});
});
-Michael Saunders,Office 插件项目经理
Excel.NamedItemCollection 提供了一个生成命名引用的 add() 方法
async function addNameToHeader() {
await Excel.run(async(context) => {
const sheet = context.workbook.worksheets.getItem("Sample");
const headerRange = sheet.getRange("A1:D1");
sheet.names.add("ExpensesHeader", headerRange);
const namedItems = sheet.names.load("name, type");
await context.sync();
});
}
async function formatRangeByName() {
await Excel.run(async(context) => {
const sheet = context.workbook.worksheets.getItem("Sample");
const headerRowName = sheet.names.getItemOrNullObject("ExpensesHeader");
headerRowName.load();
await context.sync();
if (headerRowName.value) {
const headerRange = headerRowName.getRange();
headerRange.format.fill.color = "red";
} else {
console.log("No named item created for the range.");
}
await context.sync();
});
}