Ms office 为单元格赋值时保持正确的类型

Ms office 为单元格赋值时保持正确的类型,ms-office,office-js,Ms Office,Office Js,我想用一个JavaScript对象启动一个工作表,该对象看起来像{“A1:B2”:[[“01”,“02”],[“03”,“04”]],“C5”:[[4]},我有以下代码: function sheetIni(data) { return Excel.run(function (ctx) { var sheet = ctx.workbook.worksheets.getActiveWorksheet(); for (var key in data) {

我想用一个JavaScript对象启动一个工作表,该对象看起来像
{“A1:B2”:[[“01”,“02”],[“03”,“04”]],“C5”:[[4]}
,我有以下代码:

function sheetIni(data) {
    return Excel.run(function (ctx) {
        var sheet = ctx.workbook.worksheets.getActiveWorksheet();
        for (var key in data) {
            if (data.hasOwnProperty(key)) {
                var range = sheet.getRange(key);
                range.values = newData;
            };
        }
        return ctx.sync().then(function () {
            console.log("done")
        })
    })
};
我意识到工作表中的结果分别是
1
2
3
4
in
A1
B1
A2
B2
;它会自动将字符串转换为数字(例如,
“02”
转换为
2

有人知道如何避免这种自动转换吗


一般来说,如何确保javascript值可以在不进行额外转换的情况下忠实地分配给单元格值?

将数据分配给任意单元格时,最安全的做法是先设置数字格式,然后设置值

对于文本字符串,“@”数字格式用作声明“我希望此单元格包含文本字符串,即使它作为数字输入”。这与用户手动在Excel中输入值相同


供将来参考:如果您想要回一个工作代码段,确保它的最简单方法是首先使用创建和共享一个代码段,并共享问题中指向它的链接。这样,像我这样的人就可以很容易地导入代码,进行快速调整,并将最后的代码片段发送给您。

另一种方法是在希望被视为文本的数字前面加上“

[“'01”,“02”],[“'03”,4]]

将生成excel [“01”,2],“03”,4]]

这避免了将单元格格式化为文本(这可能会产生令人讨厌的副作用)


从Excel中检索值数组时,您可以加载类型和值,然后在将数组发送回Excel之前,在数组前面加上“循环”。我的测试表明,对于一个大的值数组,如果我们制作一个数字格式数组(例如,
[[“@”,null],“@”,null],…,[“@”,null]
),这项任务需要时间
range.numberFormat=“@”
速度很快,但它会使整个范围
字符串
。此外,当用户在Excel中手动输入数字时,我认为它被视为
数字
,而不是
字符串
。您有什么技巧在分配时保留原始类型,并且不会使其速度过快吗?