从 JavaScript 范围内的每个 sheet 工作簿中获取值
get values from each sheet of workbook of range in JavaScript
我正在尝试从数组中的所有 sheet 中获取给定范围内每个单元格的值(范围在数组 (rangeAdd) 中,格式为“M1:T14”)(一个 [ 的值=24=] 应在数组的一行中)。我的代码如下,
async function getDataFromEachSheet(rangeAdd) {
await Excel.run(async (context) => {
var sheets = context.workbook.worksheets;
sheets.load("items/name");
await context.sync();
sheets.items.forEach( (sheet) =>{
var a =[]
for (const currentRange of rangeAdd) {
var range = sheet.getRange(currentRange);
range.load("values");
context.sync();
console.log(range.values)
var arr = [];
arr = range.values
var a = arr.join().split(',')
}
});
});
}
我正在
1.“未处理的承诺拒绝”和
2."属性 'values' 不可用。在读取 属性 的值之前,调用包含对象的加载方法并调用 "context.sync()" 在关联的请求上下文中。"
我无法使用 await context.sync() 而不是 context.sync();
您可以尝试使用 return context.sync().then()
而不是使用 await context.sync()
。所以更新后的代码可能看起来像这样:
async function getDataFromEachSheet(rangeAdd) {
await Excel.run(async (context) => {
var sheets = context.workbook.worksheets;
sheets.load("items/name");
await context.sync();
sheets.items.forEach((sheet) => {
var a = []
for (const currentRange of rangeAdd) {
var range = sheet.getRange(currentRange);
range.load("values");
return context.sync().then(()=>{
console.log(range.values)
var arr = [];
arr = range.values
var a = arr.join().split(',')
})
}
});
});
}
借助避免在循环中使用 context.sync 方法 https://docs.microsoft.com/en-us/office/dev/add-ins/concepts/correlated-objects-pattern。我已经设法通过以下代码获得值。
async function getDataFromEachSheet(rangeAdd) {
try {
await Excel.run(async (context) => {
const sheets = context.workbook.worksheets.load("items/name");
await context.sync();
var rangeObj = [];
sheets.items.forEach((sheet) => {
rangeAdd.forEach((currentRange) => {
const range = sheet.getRange(currentRange).load("values") ;
rangeObj.push(range);
});
});
await context.sync();
console.log(rangeObj)
})
}
catch (error) {
console.error(error);
}
}
我正在尝试从数组中的所有 sheet 中获取给定范围内每个单元格的值(范围在数组 (rangeAdd) 中,格式为“M1:T14”)(一个 [ 的值=24=] 应在数组的一行中)。我的代码如下,
async function getDataFromEachSheet(rangeAdd) {
await Excel.run(async (context) => {
var sheets = context.workbook.worksheets;
sheets.load("items/name");
await context.sync();
sheets.items.forEach( (sheet) =>{
var a =[]
for (const currentRange of rangeAdd) {
var range = sheet.getRange(currentRange);
range.load("values");
context.sync();
console.log(range.values)
var arr = [];
arr = range.values
var a = arr.join().split(',')
}
});
});
}
我正在
1.“未处理的承诺拒绝”和
2."属性 'values' 不可用。在读取 属性 的值之前,调用包含对象的加载方法并调用 "context.sync()" 在关联的请求上下文中。"
我无法使用 await context.sync() 而不是 context.sync();
您可以尝试使用 return context.sync().then()
而不是使用 await context.sync()
。所以更新后的代码可能看起来像这样:
async function getDataFromEachSheet(rangeAdd) {
await Excel.run(async (context) => {
var sheets = context.workbook.worksheets;
sheets.load("items/name");
await context.sync();
sheets.items.forEach((sheet) => {
var a = []
for (const currentRange of rangeAdd) {
var range = sheet.getRange(currentRange);
range.load("values");
return context.sync().then(()=>{
console.log(range.values)
var arr = [];
arr = range.values
var a = arr.join().split(',')
})
}
});
});
}
借助避免在循环中使用 context.sync 方法 https://docs.microsoft.com/en-us/office/dev/add-ins/concepts/correlated-objects-pattern。我已经设法通过以下代码获得值。
async function getDataFromEachSheet(rangeAdd) {
try {
await Excel.run(async (context) => {
const sheets = context.workbook.worksheets.load("items/name");
await context.sync();
var rangeObj = [];
sheets.items.forEach((sheet) => {
rangeAdd.forEach((currentRange) => {
const range = sheet.getRange(currentRange).load("values") ;
rangeObj.push(range);
});
});
await context.sync();
console.log(rangeObj)
})
}
catch (error) {
console.error(error);
}
}