![](https://habrastorage.org/files/ebe/087/ff5/ebe087ff59d3473898e3bb050fdef3b5.jpg)
1æ¥éã®Officeã¢ãã€ã³
2015幎12æã Officeã¢ãã€ã³ã³ã³ãµã«ã¿ã³ããšããŠOffice 365ã®äœæ¥ã»ãã·ã§ã³ã«åå ããããæåŸ ãããŸããã ãã®ã€ãã³ãã§ã¯ãOfficeã¹ãã¢ã§è£œåã宣äŒããããšã«é¢å¿ã®ããããŒã ãéãŸããŸããã ç®æšã¯ã2æ¥éã§Officeçšã®JavaScript APIã®è€éãã«æµžããå°æ¥ã®ãœãªã¥ãŒã·ã§ã³ã®æŠå¿µãçå®ãããããã¿ã€ããå®è£ ããããšã§ãã
äºæ¥ç®ãåå è ã®è³ªåã«å¯Ÿããçãã®éã«ãç§ã¯èªç±ãªæéãéãããŸããã ããã«ãããæ°ããã¢ã€ãã¢ã«åãçµãããšãã§ããŸããã Excelã®XLToolsæ¡åŒµæ©èœã®VSTOããŒãžã§ã³ã«ã¯ããŠãŒã¶ãŒã«äººæ°ã®ããæ©èœãã€ãŸãæ¥ä»ãå ¥åããããã®ã«ã¬ã³ããŒããããŸã ã é·ãéãOfficeã¹ãã¢ã«å®è£ ãããã£ãã®ã§ãããæãå±ããŸããã§ããã ãããŠä»¥æ¥ ã«ã¬ã³ããŒã¯æ¥ä»ã®å ¥åãå¿ èŠãªããã¥ã¡ã³ãã®åŠçé床ãå€§å¹ ã«åäžããããããäœæ¥ã»ãã·ã§ã³ã®ãããã¯ã¯çç£æ§ã§ãããã¢ã€ãã¢ã¯å®å šã«é©åããŠããŸããã
æ³å®ãããæ©èœ
äŸãšããŠãå©çšå¯èœãªãªã³ã©ã€ã³ã®ãTo-doãªã¹ããããExcelçšã®æšæºãã³ãã¬ãŒããåãäžããŸãã
![](https://habrastorage.org/files/992/bc3/072/992bc307272f447ea791a8d77830ad96.jpg)
ãã®ãããªããã¥ã¡ã³ããäœæããã«ã¯ã [ãã¡ã€ã« ]> [ æ°èŠ ]> [ãããã¯ãŒã¯äžã®ãã³ãã¬ãŒãã®æ€çŽ¢]ãã£ãŒã«ãã«ãã³ãã¬ãŒãã®ååãTo Doãªã¹ãããå ¥åããŸãã
äžã®ç»é¢ã¯ãè¡šã«ãæ¥ä»ãã¿ã€ãã®2ã€ã®ãã£ãŒã«ããããããšã瀺ããŠããŸãããéå§æ¥ããšãææ¥ãã§ãã Excelã§æ¥ä»ãæäœããªããã°ãªããªãã£ã人ã¯èª°ã§ããæ¥ä»ã®å ¥åã«ã¯å€å°ã®å°é£ã䌎ãããšãç¥ã£ãŠããŸãã ããŠãã«ã¬ã³ããŒããæ¥ä»ãéžæããããšãã§ãããïŒ
ããã§ã¢ã€ãã¢ãçãŸããŸããã çèããŠã次ã®èŠä»¶ã®ãªã¹ããå°ãåºããŸããã
- ã¯ã³ã¯ãªãã¯ã§éžæããã»ã«ã«æ¥ä»ãå ¥åããŸãã
- å€ãæã€ã»ã«ãéžæããéã®ã«ã¬ã³ããŒã®æ¥ä»ã®èªå匷調衚瀺ã
- éžæããæ¥ä»ã«é¢ããæ å ±ã®èŠèŠçãªè¡šç€ºïŒææ¥ãé±çªå·ïŒ;
- ããŸããŸãªå°åã®æ¥ä»åœ¢åŒã®ããŒã«ã©ã€ãºã
- è¿œå ã®ã³ã³ããŒãã³ããã€ã³ã¹ããŒã«ããããšãªããã«ã¬ã³ããŒãããã¥ã¡ã³ãã«çŽæ¥ãåã蟌ã¿ããŸãã
å®è£
Visual Studioã䜿çšããŠããŸãã Napaãå¥ã®ã³ãŒããšãã£ã¿ãŒãªã©ãä»ã®ããŒã«ãé©ããŠããŸãããããã©ãŒãã³ã¹ãšå©äŸ¿æ§ã®èŠ³ç¹ããã Visual Studioãæé©ãªãªãã·ã§ã³ã§ãã ããã«èµ·åããŠãããã°ã§ããããã«ãOfficeã¢ãã€ã³ãããžã§ã¯ããäœæã§ããŸãã Napaããã³ä»ã®ãµãŒãããŒãã£ã®ãšãã£ã¿ãŒã§ã¯ã Officeã¢ãã€ã³ã®ãããã°ã¯ãŸã ã§ããŸããã
ãããžã§ã¯ãäœæ
Visual Studio> File> New> Project> Templates> Office / SharePoint> Apps>ã¢ããªã±ãŒã·ã§ã³ã®çš®é¡ãéžæããŸãããApp for Officeãã ãã®èšäºã®å·çæç¹ã§ãMicrosoftã¯ãAppããšããååããAdd-inãã«çœ®ãæããŠããããšã«æ³šæããŠãã ããã ãã£ãšãããžã§ã¯ãã®ååã¯å°æ¥å€ããã§ãããã
![](https://habrastorage.org/files/293/91b/114/29391b114c3a4c0eb61211e3f6f64273.jpg)
次ã«ãã¢ããªã±ãŒã·ã§ã³ã®ã¿ã€ããèšå®ããŸãã ãªããªã ææžã®æ¬æã«åã蟌ãã¢ãã€ã³ã¯ãã¿ã€ããã³ã³ãã³ãããéžæããŸã-ã¿ã¹ã¯ã®è§£æ±ºã«æé©ã§ãã ã¿ã¹ã¯ãã€ã³ãšã³ã³ãã³ãã¿ã€ãã®éãã¯ã次ã®å³ã«æ確ã«ç€ºãããŠããŸãã
![](https://habrastorage.org/files/bd1/fdd/29d/bd1fdd29dcc0486aafbc0e6384bd096d.jpg)
æåŸã®ã¹ãããã§ããããžã§ã¯ããã³ãã¬ãŒãïŒåºæ¬ã¢ããª-åºæ¬ãããã¥ã¡ã³ãããžã¥ã¢ã©ã€ãŒãŒã·ã§ã³ã¢ããª-ããè€éïŒããã³ãµããŒããããŠããäžé£ã®ãªãã£ã¹ããã°ã©ã ïŒ ã¢ã¯ã»ã¹ãExcelãPowerPoint ïŒãéžæããããã«æ±ããããŸãã Basic Appããã³ExcelãµããŒããéžæããŸã ã å®äºãã¯ãªãã¯ããŸãã ãããžã§ã¯ããäœæãããå®è¡ïŒF5ïŒããã³ãããã°ã®æºåãã§ããŸããã
![](https://habrastorage.org/files/546/82c/b54/54682cb546ba430abb5d13367ce5e63b.jpg)
UIã®èšèšãšå®è£
èŠä»¶ãããäžåºŠèª¿ã¹ãŠããããããå®è£ ããæ¹æ³ã«ã€ããŠèããŠã¿ãŸãããã æåŸã®ãåã蟌ã¿ãããå§ãã䟡å€ããããŸãã ããã«ãæ°ããOfficeã¢ãã€ã³ã®éç«ã£ãæ©èœããããŸãã åŸæ¥ã®VSTOãšæ¯èŒããŠãè¿œå ã®ã³ã³ããŒãã³ããã€ã³ã¹ããŒã«ããå¿ èŠã¯ãããŸããã ã€ãŸã Excelããã¥ã¡ã³ããäœæããOfficeã¹ãã¢ããã¢ãã€ã³ãè¿œå ããããã¥ã¡ã³ããååã«éä¿¡ããå Žåãã¢ãã€ã³ãæ©èœããããã«è¿œå ã®ãã®ãã€ã³ã¹ããŒã«ããå¿ èŠã¯ãããŸããã ããã¯ã VSTO XLToolsã«ã¬ã³ããŒããŒãžã§ã³ã®ãŠãŒã¶ãŒã«æ¬ ããŠãããã®ã§ãã
ã«ã¬ã³ããŒã¯è€éãªUIãæäŸããŸããã ã€ã³ã¿ãŒãããäžã«ã¯ãã«ã¬ã³ããŒè¡šç€ºæ©èœãå®è£ ããèªç±ã«é åžãããJavaScriptã©ã€ãã©ãªã®æµ·ããããŸãã ä»ã®èŠä»¶ã100ïŒ æºããPikadayã©ã€ãã©ãªãéžæããŸããã ã©ã€ãã©ãªã§ã¯æ¬¡ã®ããšãã§ããŸãã
- ã¢ããªã±ãŒã·ã§ã³ã®WebããŒãžã«ã«ã¬ã³ããŒãçŽæ¥è¡šç€ºããŸãã
- ã€ãã³ãã®ãã³ãã©ãŒãããã³ã°ã ããã ãã«ã¬ã³ããŒããæ¥ä»ãéžæãããïŒ onSelect ïŒ;
- ã«ã¬ã³ããŒã§éžæããæ¥ä»ã®å€ãã³ãŒãããèšå®ããŸãïŒ setDate ïŒã
- ææ¥ãšæã®ååãç®çã®èšèªã«ç¿»èš³ããŸãã
![](https://habrastorage.org/files/4a2/9b8/f24/4a29b8f2439c41b2ade321ae3109354a.jpg)
ãã¡ãããç¬èªã®èšèšãå¿ èŠãšããããè€éãªåé¡ã解決ããããšããããããŸãã ããã§ã¯ãæè¿ãªãªãŒã¹ããã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件ã®è©äŸ¡ãåããŸããã å€ãã®è¯å®çãªãã£ãŒãããã¯ãšæ©èœã®æ¹è¯ã®ããã®ãªã¯ãšã¹ãã¯é»åã¡ãŒã«ã«ãã£ãŠæ¥ãŸããã è¿ãå°æ¥ãæ°ãããªãã·ã§ã³ãåããæ¹åãããã«ã¬ã³ããŒããªãªãŒã¹ããäºå®ã§ãã ã楜ãã¿ã«ïŒ
![](https://habrastorage.org/files/447/2f5/e8d/4472f5e8d0bf4aecb3698a901388183d.jpg)
![](https://habrastorage.org/getpro/habr/post_images/b52/20f/019/b5220f01985afc4ac5fda90f3e654820.jpg)
èè ã«ã€ããŠ
Petr Lyapin-Wave Point LLCã®ãã¯ãã«ã«ãã£ã¬ã¯ã¿ãŒ
èªååãããžã§ã¯ãã®å®è£ ã§10幎以äžã®çµéš
ããžãã¹ããã»ã¹ã 圌ã¯å€ãã®ãã·ã¢äººãšåãã
å€åœäŒæ¥ã XLTools.netãããžã§ã¯ãã®åµèšè ã