我有一个基于office.js开发的针对Excel的任务窗格插件。我在其中一格中复制日期,然后下次从该单元格读取它。基本上我使用JavaScript Date对象将从Excel读取的字符串转换为日期,然后使用它。
我认为这种方法会在将Excel文件保存在英语文化环境中并在法国文化环境的机器上打开时产生问题,因为两种文化中的日期格式不同。
我想知道如何处理这种情况。是否有办法说Excel中的单元格是日期类型。然后在不同的文化环境中自动调整其值。
我有一个基于office.js开发的针对Excel的任务窗格插件。我在其中一格中复制日期,然后下次从该单元格读取它。基本上我使用JavaScript Date对象将从Excel读取的字符串转换为日期,然后使用它。
我认为这种方法会在将Excel文件保存在英语文化环境中并在法国文化环境的机器上打开时产生问题,因为两种文化中的日期格式不同。
我想知道如何处理这种情况。是否有办法说Excel中的单元格是日期类型。然后在不同的文化环境中自动调整其值。
function getJsDateFromExcel(excelDateValue) {
return new Date((excelDateValue- (25567+2 )) * 86400 * 1000);
}
Excel中的日期:
6/14/2016 12:00:00 PM
日期的值:
42535.5
将该值转换为JavaScript中的日期:
getJsDateFromExcel(42535.5).toUTCString()
结果: "Tue, 14 Jun 2016 12:00:00 GMT"
更新
您的代码中日期格式是什么?我们需要指定正确的格式以便Excel能够识别。在设置值后,如果日期被识别为字符串,则它将向左对齐而不是像下面的图表一样:
以下是设置/获取日期的代码:
function setData() {
Excel.run(function (ctx) {
var sheetName = "Sheet1";
var rangeAddress = "A1";
var range = ctx.workbook.worksheets.getItem(sheetName).getRange(rangeAddress);
range.load("values");
return ctx.sync().then(function () {
range.values = "6/15/2016 13:00:00";
});
}).catch(function (error) {
console.log("Error: " + error);
if (error instanceof OfficeExtension.Error) {
console.log("Debug info: " + JSON.stringify(error.debugInfo));
}
});
}
function getData() {
Excel.run(function (ctx) {
var sheetName = "Sheet1";
var rangeAddress = "A1";
var range = ctx.workbook.worksheets.getItem(sheetName).getRange(rangeAddress);
range.load("values");
return ctx.sync().then(function () {
var d = getJsDateFromExcel(range.values[0])
var strD = d.toUTCString();
});
}).catch(function (error) {
console.log("Error: " + error);
if (error instanceof OfficeExtension.Error) {
console.log("Debug info: " + JSON.stringify(error.debugInfo));
}
});
}