获取数据时保留 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);
});
您可以在 Windows 和 Excel 在线尝试这个要点。 https://gist.github.com/lumine2008/475327d889031ced8daf4a87b08c832c
我们有一个使用 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.
要检查 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
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 在线尝试这个要点。 https://gist.github.com/lumine2008/475327d889031ced8daf4a87b08c832c