なぜかSlackやTeamsを差し置いて社内導入されてしまったSkype for BusinessになんとかExcelからアクセスできないものか模索してみました。
なお、下記を試して情報システムに睨まれるようになっても当方は一切関知しません。自己責任でお願いします。
前準備
-
.NET Framework 4.0環境
-
Excel-DNA一式
ExcelDna.xllは作成するdnaファイル名に合わせてLyncTest.xllに変更。64bit環境の人はExcelDna64.xllの方をリネームしてください。 -
Microsoft.Lync.Model.dll 他一式
Skype for Businessがインストールされているフォルダから持ってくる。
コード
以下をテキストエディタで作成して、上記のxllと同じフォルダに置いておく。
<DnaLibrary RuntimeVersion="v4.0" Name="LyncTest" Description="Using SfB" Language="CS">
<Reference Path="Microsoft.Lync.Model.dll" />
<![CDATA[
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Lync.Model;
public class LyncTest
{
public static string LyncState()
{
var cl = LyncClient.GetClient();
return cl.State.ToString();
}
//状態はPresenceじゃなくてActivityというんですってよ。知らなかった、そんなの…
public static string GetActivity(string uri)
{
var cl = LyncClient.GetClient();
var c = cl.ContactManager.GetContactByUri(uri);
return c.GetContactInformation(Microsoft.Lync.Model.ContactInformationType.Activity).ToString();
}
}
]]>
</DnaLibrary>
使い方
まず、Skype for Businessを起動して、サインインした状態にしておく。
(自前でサインインしようとするとサーバーからアクセスキーを取得してゴニョゴニョやる必要があります)
ワークブックにLyncTest.xllをドラッグ&ドロップして、「このアドインをこのセッションに限り有効にする」を選択しておく。
セルに数式として下記を入力。
=LyncStatus()
"SignedIn"と表示されれば、OK。
同じく、セルに数式として下記を入力。
=GetActivity("SfBにサインインしたアドレス、もしくは調べたい相手のアドレス。普通メールアドレスですかね?")
「連絡可能」とか出てくればOK。
参考
- https://blog.thoughtstuff.co.uk/2014/08/microsoft-lync-desktop-development-how-to-get-started/
- https://devblogs.microsoft.com/scripting/use-powershell-to-integrate-with-the-lync-2013-sdk-for-skype-for-business-part-2/
あとがき
メッセージの送信もできるようになれば便利になる…、のかなぁ。