2017-05-04 19 views
0

Windows Scripting Host의 JavaScript 구현에서 ActiveX 인터페이스를 통해 Microsoft Office 데이터에 액세스하면 JavaScript 날짜를 Office 날짜 변수에 할당 할 수 없다는 것을 알았습니다. 이로 인해 오류가 발생합니다. 나는에 "지금"현재 선택된 Outlook 일정 항목의 시작 시간을 설정하려면 다음 스크립트를 사용하려면ECMA-Script/JavaScript로 MS-Office/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"; 

을하지만 다른 언어 버전의 스크립트를 중단하며, 형식은 자바 스크립트 Date.toLocaleString() 구현과 호환되지 않습니다.

Office에서, 특히 JavaScript로 Outlook을 어떻게 설정할 수 있습니까?

+0

사용하지 마십시오 W3 스쿨, 문 : 마이크로 소프트의 날짜 - 생성자는 가능한 매개 변수로 VarDate 변수를 받아들입니다. * toLocaleString *에 의해 반환 된 값은 ** 전체적으로 ** 구현에 따라 다르며 언어 및 날짜 형식과 관련하여 사용자 기본 설정을 무시하는 경우가 많습니다. – RobG

답변

0

Office의 날짜는 고유 한 형식 인 "VarDate"(또는 VT_DATE)이며 JavaScript Date 유형과 완전히 호환되지 않습니다. 간략한 설명서는 여기에서 확인할 수 있습니다. https://msdn.microsoft.com/en-us/library/ff520995(v=vs.85).aspx

JavaScript 날짜에 익숙한 것들이 있기 때문에 VarDate 변수가 혼동을 줄 수 있습니다. 따라서 VarDate를 JavaScript 날짜와 동일한 방식으로 많이 비교할 수 있습니다. (여기 가정하고 질문에 예와 같이 액티브 인터페이스를 시작했습니다 아래) 다음과 같이

예를 들어, 두 개의 선택 아웃룩 약속의 시작 시간을 비교할 수 있습니다

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

그러나 JavaScript로 작성하고 조작 한 날짜를 소개하려면 VarData 유형으로 명시 적으로 변환해야합니다.

https://docs.microsoft.com/en-us/scripting/javascript/reference/date-object-javascript 그래서 당신은 Date 객체의 getVarDate-Method와 VarDate-변수에 날짜 변수를 변환 할 수 있습니다

다행히, Microsoft는 Date 객체의 자신의 ECMA-스크립트 구현이 사건을 다루고 있습니다. 날짜 객체로 변환하여 마지막으로

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

, 당신은 또한 자바 스크립트의 날짜 - 기능의 전체 범위 VarDate-변수를 조작 할 수 있습니다 :이이 같은 선택 아웃룩 약속의 시작 시간을 변경할 수 있습니다 . 잘못 "... * 로케일 규칙을 사용 * ..."

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

"Date"는 ECMAScript에서 [* type *] (http://ecma-international.org/ecma-262/7.0/index.html#sec-ecmascript-language-types)가 아니며 내장 객체입니다 . ;-) – RobG