皆さんはSharePointリストをご利用でしょうか?私はけっこう利用する機会が多いです。リストに社員情報を入れてPowerAutomateを使って朝礼当番のアナウンスに利用しています。朝礼当番って…中小企業っぽいですよね!
そのSharePointリストにcsvデータをインポートする方法をご紹介します。
*** 2023.10.31 ***
2要素認証のログインに対応させました。
プログラムの流れ
プログラムの流れはこうです。csvファイルはUTF-8(BOMなし)です。
1. SharePointリスト(UserInfoList)にアクセスする。 2. SharePointリストの中にあるデータを削除する。 3. csvファイルを読み込む 4. 空になったSharePointリストにcsvデータを登録する。
おソースはこちら
このソースを書いたのが少し前なので少し古いかもしれません。
#.NET CSOM モジュールの読み込み
# SharePoint Online Client Components SDK をダウンロードする
# https://www.microsoft.com/en-us/download/details.aspx?id=42038
Add-Type -Path "C:\Program Files\Common Files\microsoft shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll"
Add-Type -Path "C:\Program Files\Common Files\microsoft shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.Runtime.dll"
#SharePointに接続する
$siteUrl = "https://xxxxxxxxx.sharepoint.com/sites/testportal"
$ctx = New-Object Microsoft.SharePoint.Client.ClientContext($siteUrl)
$accountName = "papa@papamamameyou.com"
$password = ConvertTo-SecureString -AsPlainText -Force "password"
$credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($accountName, $password)
$ctx.Credentials = $credentials
#1. SharePointリストにアクセスする。
$list = $ctx.Web.Lists.GetByTitle("UserInfoList");
#リストアイテム取得
$camlQuery = [Microsoft.SharePoint.Client.CamlQuery]::CreateAllItemsQuery(500) #500件取得する
$colItems = $list.GetItems($camlQuery)
$ctx.Load($colItems)
$ctx.ExecuteQuery();
#2.SharePointリストの中にあるデータを削除する。
for($index = $colItems.Count - 1; $index -gt -1; $index--){
$colItems[$index].DeleteObject()
}
#3. csvファイルを読み込む
$csvPath = (Split-Path $myInvocation.MyCommand.Path -Parent) + "/userinfo.csv"
$csv = Import-Csv $csvPath
#4. 空になったSharePointリストにcsvデータを登録する。
foreach($line in $csv){
$itemInfo = New-Object Microsoft.SharePoint.Client.ListItemCreationInformation
$newItem = $list.AddItem($itemInfo)
$newItem["ShainID"] = $line.ShainID
$newItem["UserMail"] = $line.UserMail
$newItem["ChoReiDate"] = $line.ChoReiDate
$newItem.Update()
}
$ctx.ExecuteQuery()
$ctx.Dispose()
おソース解説
最初の3ブロックはおまじないです。SharePointのURL、IDとパスワードを変更してください。
SharePoint Online Client Components SDK を使うよ
PowerShellでSharePointに接続するには、SharePoint Online Client Components SDK をインストールしている必要があります。以下のサイトからダウンロード・インストールしてください。
https://www.microsoft.com/en-us/download/details.aspx?id=42038
カレントディレクトリを知りたい
$csvPath = (Split-Path $myInvocation.MyCommand.Path -Parent) + "/userinfo.csv"
上記のソースはプログラムのカレントディレクトリを取得しています。つまりこのプログラムとuserinfo.csvは同じ階層にいます。
csvファイル(ヘッダーあり)をインポートする
$csv = Import-Csv $csvPath
とてもシンプルな関数ですね!デフォルトでcsvの最初の1行目(ヘッダー)は読み込みません。ヘッダーがもしない場合
$csv = Import-Csv $csvPath -Header "ShainID", "UserMail", "ChoReiDate"
と -Header オプションを追加し、ヘッダーを追加して対応します。
まとめ
SharePointリストを使用しなくてもExcel Onlineを利用すればPowerAutomateも活用できるしそちらのほうが便利なのでは?と思いました。まぁ勉強ですよ、勉強。PowerShellやSharePointの活用事例をご紹介しているのです。いろいろな手法があってもいいでしょ?と自分を元気づけます。頼む!需要があってくれ!
コメント