SharePoint Listsは、新規作成時にExcelやcsvからの取り込みができますが、データ型をポチポチと選択するのは面倒ですし、何よりも内部列名が”field_1”になってしまうのが困ります。
また、後からデータを追加したくなったとき、列の順番を目検で揃えてグリッドビューで貼り付けるというのもスマートではありません。
という訳で、上記を解消する方法を今の私のできる範囲で考えたのでメモしておきます。
※2024/02/02 列をcsvで指定する方法を追記しました。
作業の概要
- リストを作成する(手作業)
- PowerShellで列を追加する
- Accessでデータを流し込む
リストを作成する
リストは手作業で作成します。とりあえずタイトル列だけあればよいです。
リスト自体をPowerShellで作れそうな気もしますが、どっちみち確認するのでいいでしょう。
PowerShellで列を追加する
PnP PowerShellを利用します。
PnPはコミュニティが提供しているからか他のPowerShellとはLearnでの情報量などが異なりとっつきにくいです(個人の感想)。
モジュールのインストールなどについてはLearnからGithub記事へのリンクがありますので参照してください。
PnP PowerShell の概要 | Microsoft Learn
まず、サイトに接続します。
$url = 'https://[ドメイン].sharepoint.com/sites/[サイト] Connect-PnPOnline -Url $url -Interactive
次に列を作ります。
PowerShellはcsvと相性が良いらしくてリストを別に作って読み込むような処理をよくみるのですが、よくわからないので逐語訳的にコマンドレットを作成しています。列の数がべらぼうに多くなることはあまりないのでとりあえずこれで十分(そのうちわかるようになる予定)。
このコマンド1行で、1つの列ができますので、必要分実行するのが簡単です。
Add-PnPField -List "リスト名" -DisplayName "部門" -InternalName "Department" -Type Text -AddToDefaultView
CSVファイルで指定する場合は、下記のようなcsvファイルを所定の場所においてやって下記コマンドを実行します。
リストの内容
リストの名称 | 表示名 | 内部名 | タイプ |
---|---|---|---|
testlists | 得意先名 | Customer_Name | Text |
コマンド
# CSVファイルを読み込む $data = Import-Csv -Path "C:\temp\lists.csv" # 各行の値を取得して処理する foreach($row in $data) {Add-PnPField -List $row.リストの名称 -DisplayName $row.表示名 -InternalName $row.内部名 -Type $row.タイプ -AddToDefaultView}
データ型
- Text 文字列
- Note 複数行テキスト
- Datetime 日時
- Boolean
- Choice
- File
- Integer
- Lookup
- MultiChoice
- Number
- URL
- User
また、内部列名は下記の場合置き換えられますので注意。他にもあるかも。
- / → x002f
- 先頭が数字の場合、その前に_x003 が付与される
Accessでデータを流し込む
Accessで、外部データ>オンラインデータ から先ほど作ったSharePoint Listsを指定してリンクテーブルを作成。
元のExcelデータもAccessにインポートして、データの追加クエリでExcelデータをSharePoint Listsに追加してやれば完了です。
追加クエリは、列名が同じであれば自動的によきに計らってくれるのが便利ですね。
Powser Automateを使おうと思ったら、「こっちのこの列はここに入れますよ」というのをポチポチ設定しないといけないのが面倒でした。何か楽な方法がありそうな気もするけど。
選択肢列は手作業でやっていますが、これもコマンドでできるかも。
業務的に事務仕事をすることが減って、Accessを使うことなんてもうないのかもと思っていましたが使える武器は使って便利に楽にお仕事したいです。
PnP PowerShell を初めて使ってみた記事を、まるさんが書いてくださっています。通り過ぎると忘れてしまう躓きポイントが書かれていて参考になります。