获取数据时保留 excel 中的日期格式

Persisting the date format in excel while fetching data

我们有一个使用 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"),其中returns一个格式数组。我们使用这个格式数组来决定是否我们在选择中有一个日期。主要的挑战是我们在 excel 中支持很多日期格式,并且我们正在分别为每个模式实现日期转换逻辑。我们是否有任何通用方法可以转换 excel 序列化为 excel.

中任何支持的(即 270 个位置中的所有格式)日期模式

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

我们确实尝试了 转换为 ISO 格式,但我们希望日期的格式与用户在 excel 中设置的格式相同(即 2020 年 4 月 8 日星期三应该是相同的当我们从 excel serial 转换它时。

示例 excel 系列 - “8/22/2011 在 excel 中是 40777”。请click here了解excel连载

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

API range.numberFormatCategories 表示区域中每个单元格的数字格式类别。它将 return

中的类别

这是此 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);
  });

这是文件 https://docs.microsoft.com/en-us/javascript/api/excel/excel.range?view=excel-js-preview#numberformatcategories

您可以在 Windows 和 Excel 在线尝试这个要点。 https://gist.github.com/lumine2008/475327d889031ced8daf4a87b08c832c