我们有一个使用 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序列转换为excel中任何支持的(即270个位置的所有格式)日期模式。
要检查 excel 中支持的模式,请尝试通过格式化单元格来选择不同的模式。(即右键单击一个单元格-> 格式化单元格-> 日期,然后更改格式)。
我们确实尝试了转换为 ISO 格式的https://stackoverflow.com/a/16233621/10523731,但我们希望日期与用户在 excel 中格式化它们的模式相同(即 2020 年 4 月 8 日星期三应该与我们从 excel 序列号转换它)。
示例 excel 序列 - “2011 年 8 月 22 日在 excel 中是 40777”。请点击这里了解excel系列