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 をインストールしている必要があります。以下のサイトからダウンロード・インストールしてください。

Download SharePoint Online Client Components SDK from Official Microsoft Download Center
The SharePoint Online Client Components SDK can be used to enable development with SharePoint Online. Notice that we do ...

カレントディレクトリを知りたい

$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をコピーしました