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 2013で駅すぱあとWebサービス APIの「経路探索」を使ってみました。

    「「駅すぱあとWebサービス API無償提供」を利用してみました。」で…

  2. Office関連

    代替テキストを削除するPowerPointマクロ

    PowerPointの図やSmartArt、グループやグラフといった視…

  3. Office関連

    Office製品の開発チームにユーザーの声を届けよう!

    Office 用アプリやSharePoint 用アプリを開発する際「こ…

  4. Office関連

    Google翻訳の言語自動検出機能を追う

    「Google TTSで文字列を読み上げるマクロ」でGoogle翻訳の…

  5. アイコン一覧

    Office 2013 アイコン一覧(F)

    ・Office 2013 アイコン一覧 NUM…

コメント

  • コメント (0)

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

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

Time limit is exhausted. Please reload CAPTCHA.

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

Translate

最近の記事

アーカイブ

PAGE TOP