使用ECMA脚本/ JavaScript更改MS-Office/Outlook日期

问题描述:

通过Windows脚本主机的JavaScript实现中的ActiveX接口访问Microsoft Office数据,我注意到您无法将JavaScript日期分配给Office日期变量。这会导致错误。使用ECMA脚本/ JavaScript更改MS-Office/Outlook日期

例如,如果我想用下面的脚本设置当前选定的Outlook日历条目的开始时间为“现在”,这并不工作:

olApplication = new ActiveXObject("Outlook.Application"); // call Outlook interface 
if ((olApplication.ActiveExplorer().Selection.Count > 0) && (olApplication.ActiveExplorer().Selection.Item(1).Class==26)) { // make sure an appointment-item is selected in Outlook 
    now=new Date(); 
    olApplication.ActiveExplorer().Selection.Item(1).Start = now; /* ERROR thrown */ 
    olApplication.ActiveExplorer().Selection.Item(1).Save(); 
} 

当我读到olApplication。 ActiveExplorer()。Selection.Item(1).Start或任何其他日期字段直接转换为本地化的String。我可以很容易地设置日期,申请通过分配一个本地化的时间价值:

olApplication.ActiveExplorer().Selection.Item(1).Start = "4.5.2017 12:00:00"; 

但这会破坏脚本在不同的本地化,而且格式与JavaScript的执行Date.toLocaleString()兼容。

如何在Office中设置日期,特别是使用JavaScript设置Outlook?

+0

请不要使用W3Schools的,语句:微软的日期,构造函数接受一个VarDate变量作为一个可能的参数。 * toLocaleString *返回的值完全是**实现相关的,并且经常忽略用户在语言和日期格式方面的首选项。 – RobG

Office中的日期有其自己的专有类型“VarDate”(或VT_DATE),它与JavaScript日期类型不完全兼容。 简要文档可以在这里找到:https://msdn.microsoft.com/en-us/library/ff520995(v=vs.85).aspx

VarDate变量可能会令人困惑,因为JavaScript日期熟悉的一些事情也适用于它们。因此,您可以使用与JavaScript日期相同的方式比较VarDates。

例如,您可以按如下(这里假设和下面你所发起的ActiveX接口为您的示例中的问题)比较两个选择的Outlook约会的开始时间:

if (olApplication.ActiveExplorer().Selection.Item(1).Start > olApplication.ActiveExplorer().Selection.Item(2).Start) ... 

但是,如果您想要引入您在JavaScript中创建和操作的日期,则需要将其显式转换为VarData类型。

幸运的是,微软占地面积这种情况下,与他们的ECMA脚本实现Date对象:https://docs.microsoft.com/en-us/scripting/javascript/reference/date-object-javascript

所以,你可以将日期变量转换为VarDate变量与Date对象的getVarDate-Method。这允许您更改选定的Outlook任命这样的起始时间:通过将其转换为Date对象

var now = new Date(); 
olApplication.ActiveExplorer().Selection.Item(1).Start = now.getVarDate(); 

最后,您还可以操纵VarDate变量与全方位的JavaScript的日期函数。 “使用语言环境约定...... * ......”是错误的

var outlookAppointmentStartTime = new Date(olApplication.ActiveExplorer().Selection.Item(1).Start); 
+1

ECMAScript中的“Date”不是[* type *](http://ecma-international.org/ecma-262/7.0/index.html#sec-ecmascript-language-types),它是一个内置对象。 ;-) – RobG