[英]How to do deep copy of Excel range values in Office-JS?
看來Excel JS-API會做Range.values的淺表副本。 如果要從一個位置讀取一個范圍並將其修改后的副本寫到2個不同的位置,則需要使用該范圍的深層副本:我該怎么做? 這段代碼仍然做一個淺表復制:
async function setValue() {
try {
await Excel.run(async (context) => {
let sheet = context.workbook.worksheets.getActiveWorksheet();
// A1 contains 9876543210
let rng1 = sheet.getRange("a1").load("values");
await context.sync();
console.log(JSON.stringify(rng1.values));
// rng1 value is correct =9876543210
let rng2 = sheet.getRange("B4");
let rng3 = sheet.getRange("B6");
let avar = [[]];
for (var j = 0; j < rng1.values.length; j++) {
for (var k = 0; k < rng1.values[0].length; k++) {
avar[j][k] = rng1.values[j][k];
}
}
rng3.values = avar;
console.log(JSON.stringify(avar));
// rng2 value is correct =9876543210
let avar2 = avar[0][0];
rng3.values[0][0] =avar2 + 0.01;
console.log(JSON.stringify(rng3.values));
// rng3 value is correct =9876543210.01
rng2.values = avar;
console.log("Show values of the 3 ranges before Sync")
console.log(JSON.stringify(rng1.values));
console.log(JSON.stringify(rng2.values));
console.log(JSON.stringify(rng3.values));
// rng2 and rng3 both show as 987654321.01
// BUT ONLY Rng3 has been altered!
await context.sync();
});
console.log("Done!");
}
catch (error) {
OfficeHelpers.Utilities.log(error);
}
}
要回答我自己的問題-您可以使用JQuery擴展制作深層副本
let avar = [];
$.extend(true, avar, rng1.values);
rng3.values = avar;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.