SharePointリストにcsvをインポートする

Microsoft365
スポンサーリンク

皆さんは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の活用事例をご紹介しているのです。いろいろな手法があってもいいでしょ?と自分を元気づけます。頼む!需要があってくれ!

コメント

タイトルとURLをコピーしました