Office js 如何在自定义函数officejs excel加载项中处理日期格式

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

我有这个自定义函数(共享运行时):

这为我提供了以下输出:

[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(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处理的参数。