Office関連

Excel REST APIをPowerShellから呼び出す方法

以前Excel REST APIをVBAから呼び出す方法を紹介しましたが(下記記事参照)、そのときはまだAPIがベータ版でした。

今月初めにようやく正式版がリリースされたので、今回はリリースされたばかりのAPIをPowerShellから呼び出してみたいと思います。

下準備

APIを利用するためにAzure ADの設定やらクライアント IDの取得やらが必要になりますが、細かい説明はここでは割愛します。
下記記事をご参照ください。

  1. アプリケーションの種類:ネイティブ クライアント アプリケーション
  2. リダイレクト URI:http://localhost/ERASample
  3. 他のアプリケーションに対するアクセス許可:Microsoft Graph
  4. デリゲートされたアクセス許可:Have full access to user files

PowerShellコード

#Using PowerShell and the Office 365 REST API with OAuth.
#https://blogs.technet.microsoft.com/ronba/2016/05/09/using-powershell-and-the-office-365-rest-api-with-oauth/
Function Show-OAuthWindow
{
  param(
    [System.Uri]$Url
  )
  
  Add-Type -AssemblyName System.Windows.Forms

  $form = New-Object -TypeName System.Windows.Forms.Form -Property @{Width=440;Height=640}
  $web  = New-Object -TypeName System.Windows.Forms.WebBrowser -Property @{Width=420;Height=600;Url=($url)}
  $DocComp  = {
    $Global:uri = $web.Url.AbsoluteUri
    if($Global:Uri -match "error=[^&]*|code=[^&]*"){$form.Close()}
  }
  $web.ScriptErrorsSuppressed = $true
  $web.Add_DocumentCompleted($DocComp)
  $form.Controls.Add($web)
  $form.Add_Shown({$form.Activate()})
  $form.ShowDialog() | Out-Null

  $queryOutput = [System.Web.HttpUtility]::ParseQueryString($web.Url.Query)
  $output = @{}
  foreach($key in $queryOutput.Keys){
    $output["$key"] = $queryOutput[$key]
  }

  $output
}

#------------------------------
# 要変更
#------------------------------
$client_id = "(クライアント ID)"
$redirectUrl = "http://localhost/ERASample"
$targetFile = "SampleBook.xlsx"
$targetSheet = "SampleSheet"
#------------------------------

#authorization code取得
Add-Type -AssemblyName System.Web
$loginUrl = "https://login.microsoftonline.com/common/oauth2/authorize?response_type=code&redirect_uri=" +
            [System.Web.HttpUtility]::UrlEncode($redirectUrl) + 
            "&client_id=$client_id"
$queryOutput = Show-OAuthWindow -Url $loginUrl

#access token取得
$AuthorizationPostRequest = 
  "grant_type=authorization_code" + "&" +
  "redirect_uri=" + [System.Web.HttpUtility]::UrlEncode($redirectUrl) + "&" +
  "client_id=$client_id" + "&" +
  "code=" + $queryOutput["code"] + "&" +
  "resource=" + [System.Web.HttpUtility]::UrlEncode("https://graph.microsoft.com/")
$Authorization = 
  Invoke-RestMethod -Method Post `
                    -ContentType application/x-www-form-urlencoded `
                    -Uri https://login.microsoftonline.com/common/oauth2/token `
                    -Body $AuthorizationPostRequest

#OneDriveのファイル列挙
#ファイル名を指定してファイルID取得
$items = 
  Invoke-RestMethod -Method Get `
                    -Headers @{Authorization = ("Bearer "+ $Authorization.access_token)} `
                    -Uri https://graph.microsoft.com/v1.0/me/drive/root/children
$items.value | ForEach-Object{
  if($_.name -eq $targetFile){
    $fileId = $_.id
  }
}

#指定したワークシートのセルC2の値を取得
$apiUrl = "https://graph.microsoft.com/v1.0/me/drive/items/$fileId/workbook/worksheets/$targetSheet/Range(address='C2')"
$rng = 
  Invoke-RestMethod -Method Get `
  -Headers @{Authorization = ("Bearer "+ $Authorization.access_token)} `
  -Uri $apiUrl
Write-Host $rng.values

上記コードを実行すると、Office 365のサインイン画面が表示されます。

ExcelRestAPI_PowerShell_01

認証後、問題なくAPIの呼び出しが行われると、指定したセルの値がコンソールに表示されます。

ExcelRestAPI_PowerShell_02

おわりに

今回のコードは、実は「Using PowerShell and the Office 365 REST API with OAuth. – Ron Ben Artzi」のコードをほぼそのまま持ってきただけなのですが、思った以上にシンプルに書けてビックリしました。

WebBrowserコントロールを配置したWindows フォームを動的に作成するこの方法、なかなか使いやすいです。

Invoke-RestMethodコマンドも便利ですね!
PowerShell 3.0以降でないと使えませんが、簡単にWeb APIの呼び出しを行うことができます。

VBAに比べるとだいぶ短くコードが書けるので、ちょっとAPIを試したいときは便利だと思いますが、使いやすさでいうと「Graph Explorer」には遠く及びません。
“PowerShellでもExcel REST API呼べるんだー!”的に思っていただければ幸いです。

【まほうのルミティア】ルミティアステッキ2が発売開始されたよ。前のページ

Officeファイルから作成者などのプロパティを取得するVBScript次のページ

関連記事

  1. Office関連

    [Excel]別インスタンスからの貼り付け時のダイアログを非表示にする方法

    Msdn フォーラムに「excel 2010 貼り付けで警告メッセージ…

  2. Office関連

    Outlook REST APIに会議室情報を取得するAPIが追加されました。

    松崎さんのツイートで、Outlook REST APIのベータエンドポ…

  3. アイコン一覧

    Office 2013 アイコン一覧(B)

    ・Office 2013 アイコン一覧 NUM…

  4. アイコン一覧

    Office 2013 アイコン一覧(U)

    ・Office 2013 アイコン一覧 NUM…

  5. Office アドイン

    JavaScriptで作成した作業ウィンドウアプリを検証してみる。

    ※ この情報はOffice 2013 カスタマー プレビュー版を元にし…

  6. Office関連

    Word 2013では文書にオンライン ビデオを挿入できるようになりました。

    ※ この情報はOffice 2013 カスタマー プレビュー版を元にし…

コメント

  • コメント (0)

  • トラックバックは利用できません。

  1. この記事へのコメントはありません。

Time limit is exhausted. Please reload CAPTCHA.

※本ページはプロモーションが含まれています。

Translate

最近の記事

アーカイブ

PAGE TOP