Javascript 获取数据时在excel中保存日期格式

Javascript 获取数据时在excel中保存日期格式,javascript,excel,office-js,office-js-helpers,excel-dates,Javascript,Excel,Office Js,Office Js Helpers,Excel Dates,我们有一个使用office.js构建的excel外接程序。我们从数据范围(即A1:C10)中读取数据,该数据范围可能由日期列组成。请参考下图 我们的外接程序读取数据并形成一个CSV数据集,当用户单击下载按钮时,该数据集将被下载。我们使用以下代码行读取数据 Excel.run({ delayForCellEdit: true }, async context => { this.rangeInput.nativeElement.blur(); let sheet; s

我们有一个使用office.js构建的excel外接程序。我们从数据范围(即A1:C10)中读取数据,该数据范围可能由日期列组成。请参考下图

我们的外接程序读取数据并形成一个CSV数据集,当用户单击下载按钮时,该数据集将被下载。我们使用以下代码行读取数据

  Excel.run({ delayForCellEdit: true }, async context => {
   this.rangeInput.nativeElement.blur();
   let sheet;
   sheet = context.workbook.worksheets.getItem("Sheet1");
   let range = sheet.getRange("A1:D10");
​   range.load("values");
   range.load("numberFormat");
   this.isDataLoading = true;
   this.updateLoading();
   await context.sync();
   let rangeData = range.values;
   let dataFormat = range.numberFormat;
 }) 
在上面的代码中,我们通过加载范围的数字格式(即
range.load(“numberFormat”)来获取每个单元格的数据格式
返回一个格式数组。我们使用此格式数组来决定我们的选择中是否有日期。主要的挑战是excel支持很多日期格式,并且我们分别为每个模式实现日期转换逻辑。我们是否有任何通用方法将excel序列转换为任何支持的格式(即270个位置的所有格式)excel中的日期模式

要签出excel中支持的模式,请尝试通过格式化单元格来选择不同的模式。(即右键单击单元格->格式化单元格->日期,然后更改格式)

我们确实尝试了将日期转换为ISO格式,但我们希望日期的格式与用户在excel中的格式相同(即2020年4月8日星期三,我们从excel序列转换日期时应相同)


excel序列示例-“2011年8月22日是excel中的40777”。请理解excel序列

谢谢Naveen提出的问题,我们实际上正在为此场景构建一个新的API。该API现在处于beta预览中。该API的目标是在1.12版本中发布,该版本将于今年秋天正式发布

API
range.numberFormatCategories
,表示范围内每个单元格的数字格式类别。它将以

以下是此API的示例代码

  await Excel.run(async (context) => {
    const sheet = context.workbook.worksheets.getActiveWorksheet();
    sheet.activate();
    let range = sheet.getRange("A1:C3");
    range.load("address");
    range.load("numberFormatCategories");
    await context.sync();
    console.log("address: " + range.address);
    console.log("NumberFormatCategory: " + range.numberFormatCategories);
  });
这是文件


您可以在Windows和Excel online中尝试这一要点。

谢谢Raymond。当API发布时,它将非常有用。我们计划在Ignite会议上为该API添加GA