簡體   English   中英

如何在Office-JS中進行Excel范圍值的深層復制?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM