Office js 如何在自定义函数officejs excel加载项中处理日期格式
我有这个自定义函数(共享运行时): 这为我提供了以下输出: [44225,1.8541]、[44232,1.874]、[44239,1.94]] 第一列是excel通用格式的日期。我怎样才能像每个用户的文化一样呈现这个日期 例如:美国35062->2021年12月29日,英国35062->2021年12月29日 我的尝试: 我尝试使用“Excel.range类”的“number format”属性,但问题是:我无法仅获取自定义函数数据的范围Office js 如何在自定义函数officejs excel加载项中处理日期格式,office-js,exceljs,custom-functions-excel,Office Js,Exceljs,Custom Functions Excel,我有这个自定义函数(共享运行时): 这为我提供了以下输出: [44225,1.8541]、[44232,1.874]、[44239,1.94]] 第一列是excel通用格式的日期。我怎样才能像每个用户的文化一样呈现这个日期 例如:美国35062->2021年12月29日,英国35062->2021年12月29日 我的尝试: 我尝试使用“Excel.range类”的“number format”属性,但问题是:我无法仅获取自定义函数数据的范围 ... return promise.then(fun
...
return promise.then(function(result){
var data = result
var resp = JSON.parse(data)
return resp
}).then(function(){
format();
})
};
async function format() {
await Excel.run(async (context) => {
const sheet = context.workbook.worksheets.getActiveWorksheet();
const range = sheet.getUsedRange();
range.load('rowCount')
range.load('columnCount')
await context.sync().then(function (){
var formatoPadrao = ["dd/mm/yy", null];
var matrizConfig = [];
for(var i = 0; i < range.rowCount; i++){
matrizConfig.push(formatoPadrao);
}
range.numberFormat = matrizConfig;
console.log(matrizConfig);
});
});
}
。。。
返回承诺。然后(函数(结果){
var数据=结果
var resp=JSON.parse(数据)
返回响应
}).然后(函数(){
格式();
})
};
异步函数格式(){
等待Excel.run(异步(上下文)=>{
const sheet=context.workbook.worksheets.getActiveWorksheet();
常量范围=sheet.getUsedRange();
range.load('rowCount')
range.load('columnCount')
等待context.sync()。然后(函数(){
var formatoPadrao=[“日/月/年”,空];
var matrizConfig=[];
对于(变量i=0;i
Obs:getUsedRange()不工作,因为工作表有很多表,我只需要格式化自定义函数数据
...
return promise.then(function(result){
var data = result
var resp = JSON.parse(data)
return resp
}).then(function(){
format();
})
};
async function format() {
await Excel.run(async (context) => {
const sheet = context.workbook.worksheets.getActiveWorksheet();
const range = sheet.getUsedRange();
range.load('rowCount')
range.load('columnCount')
await context.sync().then(function (){
var formatoPadrao = ["dd/mm/yy", null];
var matrizConfig = [];
for(var i = 0; i < range.rowCount; i++){
matrizConfig.push(formatoPadrao);
}
range.numberFormat = matrizConfig;
console.log(matrizConfig);
});
});
}
你能分享一些代码示例或给出一些指导吗
开发环境:Windows 10、office 365 MSO(16.0.13929.20222)64位、最新边缘版本90.0.818.51、Vs代码与Yeoman生成器、Excel桌面、共享运行时
参考资料:
一旦设置了日/月/年,则无论定义了哪个地区或国家,格式都不能根据区域性进行更改。解除阻止的一种方法是在js中判断区域性或国家,然后设置要在此区域中显示的不同格式。要仅获取自定义函数数据,可以注册onCalculatedEvent,它可以在触发onCalculatedEvent时返回计算出的地址 代码段如下所示:
const sheet = context.workbook.worksheets.getActiveWorksheet();
eventResult = sheet.onCalculated.add(onCalculatedEvent);
async function onCalculatedEvent(eventArgs: Excel.WorksheetCalculatedEventArgs) {
await Excel.run(async (context) => {
const calculateType = eventArgs.type;
const calculateAddress = eventArgs.address;
console.log(`Calculation is at ${calculateAddress}, type is ${calculateType})`);
});
}
小春,谢谢你的回复。我能够获得字符串地址,但我无法操作它,比如var range=sheet.getRange(calculateAddress);/range.select();在range.select()之后是否添加了“wait context.sync();”?小春,是的。我尝试了以下方法:函数onCalculatedEvent(event){return Excel.run(函数(context){return context.sync()。然后(函数(){console.log(“事件地址:”+event.Address);var stringAddress=JSON.stringify(event.Address)var range=sheet.getRange(stringAddress);range.numberFormat=[[“dd/mm/yy”,null],“dd/mm/yy”,null],“dd/mm/yy”,null];})您可以尝试修改如下代码:async函数onCalculatedEvent(eventArgs:Excel.WorksheetCalculatedEventArgs){等待Excel.run(异步(上下文)=>{const calculateType=eventArgs.type;const calculatedAddress=eventArgs.address;console.log(
计算位于${calculatedAddress},类型为${calculateType})
);let range=context.workbook.worksheets.getActiveWorksheet().getRange(calculatedAddress);var numberFormat=[[“dd/mm/yy”,null],“dd/mm/yy”,null][“dd/mm/yy”,null]];range.numberFormat=numberFormat;wait context.sync();});}desantera,代码无法工作的原因是地址不正确。请直接使用event.address作为sheet.getRange的输入参数,而不是由JSON.stringify处理的参数。