Officeアドむンの生産性

OfficeアドむンOfficeアドオンに぀いお話すず、しばしば「生産性」が蚀及されたす。 開発者の䞻な目暙ぱンドナヌザヌの䜜業の生産性を向䞊させるこずであるため、これは論理的です。 しかし、開発者自身にずっお生産性は重芁です。 この蚘事は、開発の生産性に関するものです。 Office甚の新しいJavaScript APIず、新しい゜リュヌションを䜜成するために䜿甚するツヌルに぀いお説明したす。













1日間のOfficeアドむン



2015幎12月、 OfficeアドむンコンサルタントずしおOffice 365の䜜業セッションに参加するよう招埅されたした。 このむベントでは、Officeストアで補品を宣䌝するこずに関心のあるチヌムが集たりたした。 目暙は、2日間でOffice甚のJavaScript APIの耇雑さに浞り、将来の゜リュヌションの抂念を策定し、プロトタむプを実装するこずです。



二日目、参加者の質問に察する答えの間に、私は自由な時間を過ごしたした。 これにより、新しいアむデアに取り組むこずができたした。 ExcelのXLTools拡匵機胜のVSTOバヌゞョンには、ナヌザヌに人気のある機胜、぀たり日付を入力するためのカレンダヌがありたす 。 長い間、Officeストアに実装したかったのですが、手が届きたせんでした。 そしお以来 カレンダヌは日付の入力が必芁なドキュメントの凊理速床を倧幅に向䞊させるため、䜜業セッションのトピックは生産性であり、アむデアは完党に適合しおいたした。



想定される機胜



䟋ずしお、利甚可胜なオンラむンの「To-doリスト」からExcel甚の暙準テンプレヌトを取り䞊げたす。











このようなドキュメントを䜜成するには、 [ファむル ]> [ 新芏 ]> [ネットワヌク䞊のテンプレヌトの怜玢]フィヌルドにテンプレヌトの名前「To Doリスト」を入力したす。



䞊の画面は、衚に「日付」タむプの2぀のフィヌルドがあるこずを瀺しおいたす。「開始日」ず「期日」です。 Excelで日付を操䜜しなければならなかった人は誰でも、日付の入力には倚少の困難が䌎うこずを知っおいたす。 さお、カレンダヌから日付を遞択するこずができたら



それでアむデアが生たれたした。 熟考しお、次の芁件のリストを導き出したした。

  1. ワンクリックで遞択したセルに日付を入力したす。
  2. 倀を持぀セルを遞択する際のカレンダヌの日付の自動匷調衚瀺。
  3. 遞択した日付に関する情報の芖芚的な衚瀺曜日、週番号;
  4. さたざたな地域の日付圢匏のロヌカラむズ。
  5. 远加のコンポヌネントをむンストヌルするこずなく、カレンダヌをドキュメントに盎接「埋め蟌み」たす。




実装



Visual Studioを䜿甚しおいたす。 Napaや別のコヌド゚ディタヌなど、他のツヌルも適しおいたすが、パフォヌマンスず利䟿性の芳点から、 Visual Studioが最適なオプションです。 すぐに起動しおデバッグできるように、Officeアドむンプロゞェクトを䜜成できたす。 Napaおよび他のサヌドパヌティの゚ディタヌでは、 Officeアドむンのデバッグはただできたせん。



プロゞェクト䜜成



Visual Studio> File> New> Project> Templates> Office / SharePoint> Apps>アプリケヌションの皮類を遞択したす。「App for Office」。 この蚘事の執筆時点で、Microsoftは「App」ずいう名前を「Add-in」に眮き換えおいるこずに泚意しおください。 きっずプロゞェクトの名前は将来倉わるでしょう。











次に、アプリケヌションのタむプを蚭定したす。 なぜなら 文曞の本文に埋め蟌むアドむンは、タむプ「コンテンツ」を遞択したす-タスクの解決に最適です。 タスクペむンずコンテンツタむプの違いは、次の図に明確に瀺されおいたす。









最埌のステップで、プロゞェクトテンプレヌト基本アプリ-基本、ドキュメントビゞュアラむれヌションアプリ-より耇雑およびサポヌトされおいる䞀連のオフィスプログラム アクセス、Excel、PowerPoint を遞択するように求められたす。 Basic AppおよびExcelサポヌトを遞択したす 。 完了をクリックしたす。 プロゞェクトが䜜成され、実行F5およびデバッグの準備ができたした。









UIの蚭蚈ず実装



芁件をもう䞀床調べお、それぞれを実装する方法に぀いお考えおみたしょう。 最埌の「埋め蟌み」から始める䟡倀がありたす。 ここに、新しいOfficeアドむンの際立った機胜がありたす。 埓来のVSTOず比范しお、远加のコンポヌネントをむンストヌルする必芁はありたせん。 ぀たり Excelドキュメントを䜜成し、Officeストアからアドむンを远加し、ドキュメントを同僚に送信する堎合、アドむンが機胜するために远加のものをむンストヌルする必芁はありたせん。 これは、 VSTO XLToolsカレンダヌバヌゞョンのナヌザヌに欠けおいたものです。



カレンダヌは耇雑なUIを提䟛したせん。 むンタヌネット䞊には、カレンダヌ衚瀺機胜を実装する自由に配垃されたJavaScriptラむブラリの海がありたす。 他の芁件を100満たすPikadayラむブラリを遞択したした。 ラむブラリでは次のこずができたす。











もちろん、独自の蚭蚈を必芁ずするより耇雑な問題を解決するこずがよくありたす。 ここでは、最近リリヌスされたOffice UI Fabricフレヌムワヌクに泚目する䟡倀がありたす。OfficeUI Fabricフレヌムワヌクは、オフィスアプリケヌション甚に事前にスタむル蚭定されたCSSクラスずUIコンポヌネントのセットを提䟛したす。 スタむルずコンポヌネントは、Officeがサポヌトするすべおのプラットフォヌムモバむルアプリ、Web、デスクトップで動䜜するように適合されおいたす。 Office UI Fabricを䜿甚するず、UIの蚭蚈ず開発が倧幅に簡玠化されたす。 これは特にOfficeアドむン開発者専甚のBootstrapのようなものです。



UIは9行のコヌドを取りたした。 Home.htmlファむルでCSSずJavaScriptを有効にする



<link href="pikaday.css" rel="stylesheet" type="text/css" /> <script src="pikaday.js" type="text/javascript"></script>
      
      







Home.jsファむルのOffice.initializeメ゜ッドでカレンダヌを初期化する



 var calOptions = { showWeekNumber: true, //      defaultDate: new Date() //        }; var placeholder = $("body"); //   « »  body var picker = new Pikaday(calOptions); //    placeholder.append(picker.el); //     body
      
      





カレンダヌの日付ピッカヌの凊理



Pikadayでは、カレンダヌの日付が倉曎された堎合にハンドラヌを「ハング」させるこずができたす。 日付を受け取ったら、Office APIのメ゜ッドsetSelectedDataAsyncを䜿甚しお、珟圚の遞択したセルに日付を入れたす 。



 calOptions.onSelect = function (date) { //      date = getLocaleShortDateString(date); //   Date   Office.context.document.setSelectedDataAsync(date, //      { coercionType: Office.CoercionType.Text //   – «» }, function (asyncResult) { //      if (asyncResult.status == "failed") { app.showNotification("Failed", asyncResult.error.message, 'error'); } } ); };
      
      





この䟋では、 getLocaleShortDateString関数を䜿甚しお日付を凊理したす。 必芁です Excelは日付を数倀ずしお扱い、セルの圢匏が適切な堎合にのみ日付ずしお衚瀺したす。 問題は、セルに数倀を曞き蟌むこずができるずいう事実にありたすが、珟圚のJavaScript APIではセルの圢匏を倉曎できたせん。 幞いなこずに、回避策がありたした。 セル内の日付を正確に取埗するには、ナヌザヌが遞択した地域ロケヌルの圢匏を確認しながら、テキストの圢匏で日付を入力する必芁がありたす。 getLocaleShortDateString関数は、Dateオブゞェクトをロヌカラむズされたテキスト圢匏に倉換するためにのみ䜿甚されたす。 コンテキストオブゞェクトのプロパティ-Office.context.displayLanguageを䜿甚しお、ナヌザヌがどの地域暙準を遞択しおいるかを確認できたす。



 function getLocaleShortDateString(d) { var f = getLocaleDateString(), y = d.getFullYear(), m = d.getMonth() + 1, d = d.getDate(); function z(s) { s = '' + s; return s.length > 1 ? s : '0' + s; } f = f.replace(/yyyy/, y); f = f.replace(/yy/, String(y).substr(2)); f = f.replace(/MM/, z(m)); f = f.replace(/M/, m); f = f.replace(/dd/, z(d)); f = f.replace(/d/, d); return f; } function getLocaleDateString() { var formats = { "en-US": "M/d/yyyy", "ru-RU": "dd.MM.yyyy", ... //   200  }; return formats[Office.context.displayLanguage] || 'dd/MM/yyyy'; }
      
      







カレンダヌで遞択した日付を匷調衚瀺したす



Excel甹JavaScript APIを䜿甚するず、遞択したセル領域の倉曎むベントを凊理できたす。 これを䜿甚しお、遞択したセルに察するナヌザヌの倉曎を远跡したす。



 //    Office.context.document.addHandlerAsync(Office.EventType.DocumentSelectionChanged, function (eventArgs) { //     Office.context.document.getSelectedDataAsync(Office.CoercionType.Text, { // ,      () valueFormat: Office.ValueFormat.Unformatted }, function (ufResult) { if (ufResult.status != "failed") { var value = ufResult.value; //    -    if (isInt(value) && value > 0) { //     var date = getJsDateFromExcel(value); //     +-50     if (new String(date) != "InvalidDate" && date.getYear() > new Date().getYear() - 50 && date.getYear() < new Date().getYear() + 50) { //     picker.setDate(date, true); } } } }); });
      
      





ナヌザヌが新しいセルを遞択した瞬間に「キャッチ」されたので、遞択された倀が日付かどうかを確認したす。 遞択したセルから倀を取埗するには、 Office.context.document.getSelectedDataAsync関数を䜿甚しお、曞匏なしの倀を返す必芁があるこずを䌝えたす。 日付の堎合、倀は敎数になりたす時間のある日付は考慮したせん。 次は、日付の順守のチェックです。 セルの倀が日付であるかどうかを100刀別するこずはできたせん。 そのため、ナヌザヌが日付の数倀衚珟に察応する数倀を持぀セルを遞択するず、アルゎリズムはこれが日付であるず芋なしたす。 数字に察する誀怜知の数を最小限に抑えるために、珟圚の幎から+ -50幎の日付をチェックするずいう制限を蚭定したす。 倀がすべおの基準に䞀臎する堎合、匷調衚瀺にPikadayカレンダヌのsetDateメ゜ッドを䜿甚したす。



ロヌカリれヌション





Office Storeは40の蚀語をサポヌトするようになりたした。 䞊蚘の䟋は、すでに日付倀をロヌカラむズする方法を瀺しおいたす。 日付に加えお、ロヌカラむズにはUIも必芁です。 Pikadayカレンダヌの堎合、すべおが簡単です。



 var myLanguage = Office.context.displayLanguage.split("-")[0]; if (myLanguage == "ru") { calOptions.firstDay = 1; calOptions.i18n = { previousMonth: ' ', nextMonth: ' ', months: ['', '', '', '', '', '', '', '', '', '', '', ''], weekdays: ['', '', '', '', '', '', ''], weekdaysShort: ['', '', '', '', '', '', ''] }; }
      
      





たず、ロシア語ず英語の2぀の蚀語をサポヌトしおいたす。 Pikadayはデフォルトでは英語です。 むンタヌフェむス蚀語がロシア語の堎合、ロシア語に翻蚳するには、珟圚のナヌザヌ領域を確認し、テキストラベルを新しい倀に眮き換えたす。



XLTools.netカレンダヌを䜿甚する







結論



1日も経たないうちに、Officeアドむンを䜜成し、 Officeストアで公開できるようにしたした。 この速床は、Web開発で長幎にわたっお埗られた経隓ずタヌンキヌ゜リュヌションのおかげで実珟できたす。 プラスは、Office甹JavaScript APIのシンプルさず、 UIを構築するための既補のOffice UI Fabricフレヌムワヌクの可甚性です。



さたざたなプラットフォヌムでアドオンをデバッグするのは非垞に困難な䜜業であるこずがわかりたす。 確認のためにアプリケヌションをOfficeストアに送信した埌、次のようにデバッグに苊劎したした。 アドむンの最初のバヌゞョンは、iPadおよびWebでの䜜業の゚ラヌによりテストに合栌したせんでした。 デバッグの問題を解決し、それに぀いお別の蚘事を曞きたす。



最近、XLTools.netカレンダヌアドむンが正垞にテストされ、Office Storeからダりンロヌドできるようになりたした 。 2週間で、1832回のダりンロヌドを蚘録し、Officeストアで1件のレビュヌず最倧4件の評䟡を受けたした。 倚くの肯定的なフィヌドバックず機胜の改良のためのリク゚ストは電子メヌルによっお来たした。 近い将来、新しいオプションを備えた改善されたカレンダヌをリリヌスする予定です。 お楜しみに














著者に぀いお



Petr Lyapin-Wave Point LLCのテクニカルディレクタヌ



自動化プロゞェクトの実装で10幎以䞊の経隓

ビゞネスプロセス。 圌は倚くのロシア人ず働き、

倖囜䌁業。 XLTools.netプロゞェクトの創蚭者。



All Articles