2017-05-04 16 views
0

Windows Scripting HostのJavaScript実装でActiveX-Interface経由で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"; 

が、これは別のローカライズでスクリプトを中断します、そして形式はJavaScriptのDate.toLocaleString()実装と互換性がありません:私は簡単に日付提出それにローカライズされた時間の値を割り当てることによって設定することができます。

どのように私はOfficeで、特にJavaScriptでOutlookを設定できますか?

+0

w3schoolを使用しないでください。「*使用するロケール規則... *」という記述は間違っています。 * toLocaleString *によって返される値は、**完全に**実装依存であり、言語と日付の書式に関するユーザーの好みを頻繁に無視します。 – RobG

答えて

0

Officeの日付は独自の独自の型 "VarDate"(またはVT_DATE)を持ちますが、これはJavaScriptのDate型と完全に互換性がありません。 簡単なドキュメントは次のURLにあります。https://msdn.microsoft.com/en-us/library/ff520995(v=vs.85).aspx

JavaScript日付に慣れているものもありますので、VarDate変数が混乱する可能性があります。したがって、VarDatesはJavaScriptの日付と同じように多く比較できます。例えば

次のように、あなたは(ここで仮定して、質問にあなたの例のように、ActiveXのインターフェイスを開始しまし以下)選択された2つの展望、予定の開始時間を比較することができます:

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

ただし、JavaScriptで作成および操作した日付を導入する場合は、明示的にVarData型に変換する必要があります。

幸運なことに、MicrosoftはDateオブジェクトの彼らのECMAスクリプトの実装でこのケースを取り上げます。https://docs.microsoft.com/en-us/scripting/javascript/reference/date-object-javascript

ですから、DateオブジェクトのgetVarDate-MethodでVarDate変数に日付変数に変換することができます。これは、あなたはこのような選択された展望-予定の開始時間を変更することができます:

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

最後に、あなたはまた、日付オブジェクトに変換してJavaScriptの日付関数の完全な範囲でVarDate-変数を操作することができます。 MicrosoftのDate-constructorは、可能なパラメータとして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