如何在excel addin office.js中处理日期类型

时间:2016-06-14 05:24:41

标签: office365-apps office-js

我有一个使用office.js开发的基于任务窗格的Excel加载项。我在excel中的一个单元格上复制日期,然后从该单元格中读取它。基本上我使用javascript Date对象将读取的字符串从excel转换为日期然后使用它。

我认为这种方法会在excel文件保存在英语文化中并在具有法国文化的机器上打开时产生问题。因为两种文化中日期的格式都不同。

我想知道如何处理这种情况。有没有办法说Excel中的单元格是日期类型。然后在不同的文化中相应地调整其价值。

1 个答案:

答案 0 :(得分:2)

如果单元格的值类型是日期,当我们从该文本中获取值时,我们将在UI上获得数字而不是文本显示。

该数字代表自1900年1月1日以来的天数,加上24小时工作日的小数部分:ddddd.tttttt。这称为序列日期或序列日期时间。有关Excel中的日期和时间,请参阅here。但是,JavaScript中的日期从1970年1月1日UTC开始(参考Date in JavaScript)。

我们需要将数字转换为我们想要的JavaScript日期时间。并且Excel在将日期时间转换为值时不会计算时区。

这是一个将Excel中的日期值转换为UTC以供参考的演示:

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()

结果: “星期二,2016年6月14日12:00:00 GMT”

<强>更新

代码中的日期格式是什么?我们需要指定Excel可以识别的正确格式。设置值后,如果日期被识别为字符串,它将向左对齐,而不是如下图所示: enter image description here

以下是设置/获取日期的代码:

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));
        }
    });
}

getData的结果: enter image description here