Ms office 为单元格赋值时保持正确的类型
我想用一个JavaScript对象启动一个工作表,该对象看起来像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) {
{“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
inA1
,B1
,A2
,B2
;它会自动将字符串转换为数字(例如,“02”
转换为2
)
有人知道如何避免这种自动转换吗
一般来说,如何确保javascript值可以在不进行额外转换的情况下忠实地分配给单元格值?将数据分配给任意单元格时,最安全的做法是先设置数字格式,然后设置值 对于文本字符串,“@”数字格式用作声明“我希望此单元格包含文本字符串,即使它作为数字输入”。这与用户手动在Excel中输入值相同
供将来参考:如果您想要回一个工作代码段,确保它的最简单方法是首先使用创建和共享一个代码段,并共享问题中指向它的链接。这样,像我这样的人就可以很容易地导入代码,进行快速调整,并将最后的代码片段发送给您。另一种方法是在希望被视为文本的数字前面加上“
[“'01”,“02”],[“'03”,4]] 将生成excel [“01”,2],“03”,4]] 这避免了将单元格格式化为文本(这可能会产生令人讨厌的副作用)
从Excel中检索值数组时,您可以加载类型和值,然后在将数组发送回Excel之前,在数组前面加上“循环”。我的测试表明,对于一个大的值数组,如果我们制作一个数字格式数组(例如,
[[“@”,null],“@”,null],…,[“@”,null]
),这项任务需要时间range.numberFormat=“@”
速度很快,但它会使整个范围字符串
。此外,当用户在Excel中手动输入数字时,我认为它被视为数字
,而不是字符串
。您有什么技巧在分配时保留原始类型,并且不会使其速度过快吗?