Export Sharepoint List to a Excel file automatically by powershell
Sharepointリストの読み込み
SharepointリストをPowershellで扱うにはCSOMライブラリを使います。
リスト更新方法についての記事にライブラリの使い方の詳細を書いてますので、そちらを参照してください。ライブラリの読み込みから解説してます。
下記を行って$itemにリストアイテムを読み込んだ前提で以下をお読みください。
$itemを読み込むと、テキストはテキストで、オブジェクトはオブジェクトのまま入っています。
Excelに取り出すときは平文で取りたいはずです。ですので表示用のTextを取得するために、下記のプロパティを使います。
1 2 3 4 5 6 7 8 |
#Fieldに設定されているTextのみを取り出したい場合、$itemのFieldValuesAsTextプロパティをコンテキストにしてExecuteQueryします。 $FieldValuesAsText = $null $FieldValuesAsText = $item.FieldValuesAsText $Context.Load($FieldValuesAsText) $Context.ExecuteQuery() #取得した値を表示します。 $FieldValuesAsText.FieldValues |
このFieldValuesAsTextプロパティを利用してリストアイテムの行が取得できます。
ということで、ちょっと前に戻ってリスト全体を取得してから各アイテムのFieldValuesAsTextプロパティを取ることで必要な情報を取得できます。
まずは、CamlQueryの指定。これはxmlで取得するデータを指定するものですが、何も指定しなければ、リスト全体を取得します。
1 2 3 4 5 6 |
$Query = New-Object Microsoft.SharePoint.Client.CamlQuery $Query.ViewXml = "" $ListItems =$null $ListItems = $List.getItems($Query) $Context.Load($ListItems) $Context.ExecuteQuery() |
結果を格納する空の配列を作ります。
1 |
$RptCollection = @() |
要素付き配列($Row)を宣言して、要素を設定して$RptCollectionに追加していきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
foreach($item in $ListItems){ $Row = "" | Select ID,Title,MultitextField,Author,Created,Editor,Modified $FieldValuesAsText = $null $FieldValuesAsText = $item.FieldValuesAsText $Context.Load($FieldValuesAsText) $Context.ExecuteQuery() #$FieldValuesAsText.FieldValues $Row.ID =$item.Id $Row.Title=$FieldValuesAsText['Title'] $Row.MultitextField = $FieldValuesAsText["MultitextField"] $Row.Modified=$FieldValuesAsText['Modified'] $Row.Author =$FieldValuesAsText['Author'] $Row.Editor =$FieldValuesAsText['Editor'] $Row.Created =$FieldValuesAsText['Created'] $RptCollection += $Row } |
これで$RptCollectionに値が配列として入ります。これをExportすればOKです。
Export-Csvでも良いんですが、おすすめはExport-Excelコマンドレットです。直接xlsxファイルになりますし機能も豊富です。グラフやピボットテーブルを作ることも可能です。
ImportExcelモジュールに含まれています。詳しくは下記をご覧ください。
Export-Excelコマンドレットの使い方【ImportExcel】【Powershell】
1 |
$RptCollection|Export-Excel -Path .\list.xlsx -ClearSheet -AutoFilter -Show -FreezeTopRow |
全体のScriptとしては以下の通りです。