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

问题描述

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

/*
 * @customfunction
 * @param {number} first
 * @param {number} second
 * @param {string} third
 * @returns {number[][]}
 */

  function GETDADOS(first,second,third) {
    var promise = new Promise(function(resolve){
      $.ajax({
        ...
        //HTTP requisition
        ...
        }
      });
    })
    return promise.then(function(result){
      var data = result
      var resp = JSON.parse(data)
      return resp
    })
  })
  };

这为我提供了这个输出:

[[44225,1.8541],[44232,1.874],[44239,1.94]]

第一列是excel通用格式的日期。我怎样才能像每个用户的文化一样呈现这个日期?

前:美国 35062 -> 12/29/2021,英国 35062 -> 29/12/2021

我的尝试:

我尝试使用“Excel.range class”的“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);
  
      });
    });
  }  

Obs:getUsedRange() 不起作用,因为工作表有很多表格,我只需要格式化自定义函数数据。

你能分享一些代码示例或提供一些指导吗?

开发环境:Windows 10、office 365 MSO (16.0.13929.20222) 64 位、Edge 版本 90.0.818.51 最新、Vs Code 与 Yeoman 生成器、Excel 桌面、共享运行时。

参考文献:

Finding dirty cells

Getting current region

numberFormat() question

Setting the number format question

The ways to get a range with excel javascript API

MsDate plugin document

解决方法

一旦设置了dd/mm/yy,那么无论哪个地区或国家,格式都被定义了,不能改变取决于文化。解除封锁的一种方法是在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})`);
    });
 }

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...