【PowerShell】PnP.PowerShell を使用してカスタムリストに複数行テキスト列を追加する

サイトに接続する方法は以下を参照してください。
[【PowerShell】PnP.PowerShell を使用して SharePoint Online のリストを操作する - Qiita](https://qiita.com/MakotoIshikawa/items/bdad2292c9078f1709fa#%E3%82%B5%E3%82%A4%E3%83%88%E3%81%AB%E6%8E%A5%E7%B6%9A%E3%81%99%E3%82%8B)

# カスタムリストに複数行テキスト列を追加する

複数行テキストの列で使用可能なテキストは 3 種類です。

- 書式なしテキスト
- リッチ テキスト (太字、斜体、テキストの配置、ハイパーリンク)
- 拡張リッチ テキスト (画像、表、ハイパーリンクを含むリッチ テキスト)

# プレーンテキスト形式

## 書式なしテキスト

『本文 (内部名：Body)』列を追加するコマンドです。

```powershell
# [本文]列追加
$Field = Add-PnPField -List $ListName -DisplayName '本文' -InternalName Body -Type Note -AddToDefaultView

[xml]$SchemaXml = $Field.SchemaXml
$SchemaXml.Field

Type        : Note
Name        : Body
DisplayName : 本文
ID          : {46e048bf-31dc-43c3-bdb3-3afa79160de3}
Group       : 
Required    : FALSE
SourceID    : {e03bb218-aa6b-4cb6-baed-444ce9d3726f}
StaticName  : Body
ColName     : ntext2
RowOrdinal  : 0
```

# HTML 形式

## リッチ テキスト

『本文』列を『リッチ テキスト』形式に変更するコマンドです。

```powershell
$SchemaXml.Field.SetAttribute('CustomFormatter', '')
$SchemaXml.Field.SetAttribute('EnforceUniqueValues', 'FALSE')
$SchemaXml.Field.SetAttribute('Indexed', 'FALSE')
$SchemaXml.Field.SetAttribute('IMEMode', '')

# 編集対象の行数
$SchemaXml.Field.SetAttribute('NumLines', '1000')

# 使用可能なテキストの種類
$SchemaXml.Field.SetAttribute('RichText', 'TRUE')
$SchemaXml.Field.SetAttribute('RestrictedMode', 'TRUE')
$SchemaXml.Field.SetAttribute('RichTextMode', 'Compatible')
$SchemaXml.Field.SetAttribute('IsolateStyles', 'FALSE')

# 既存テキストへの変更履歴の追加
$SchemaXml.Field.SetAttribute('AppendOnly', 'FALSE')

Set-PnPField -List $ListName -Identity $Field.Id -Values @{ SchemaXml = $SchemaXml.OuterXml } -UpdateExistingLists
```

## 拡張リッチ テキスト

『本文』列を『拡張リッチ テキスト』形式に変更するコマンドです。

```powershell
$SchemaXml.Field.SetAttribute('CustomFormatter', '')
$SchemaXml.Field.SetAttribute('EnforceUniqueValues', 'FALSE')
$SchemaXml.Field.SetAttribute('Indexed', 'FALSE')
$SchemaXml.Field.SetAttribute('IMEMode', '')

# 編集対象の行数
$SchemaXml.Field.SetAttribute('NumLines', '1000')

# 使用可能なテキストの種類
$SchemaXml.Field.SetAttribute('RichText', 'TRUE')
$SchemaXml.Field.SetAttribute('RestrictedMode', 'TRUE')
$SchemaXml.Field.SetAttribute('RichTextMode', 'FullHtml')
$SchemaXml.Field.SetAttribute('IsolateStyles', 'TRUE')

# 既存テキストへの変更履歴の追加
$SchemaXml.Field.SetAttribute('AppendOnly', 'FALSE')

Set-PnPField -List $ListName -Identity $Field.Id -Values @{ SchemaXml = $SchemaXml.OuterXml } -UpdateExistingLists
```

## HTML 形式にすることで追加される Field 要素の属性

**リストの設定** 画面で設定を『[リッチ テキスト](#リッチ-テキスト)』または『[拡張リッチ テキスト](#拡張リッチ-テキスト)』に変更した際に追加される Field 要素の属性です。   
![image-RichTextMode.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111975/0ce7e36a-4d3c-d2ee-5d8d-8526cdc1628d.png)


| 属性名              | リッチ         | 拡張         | 備考                                                         |
| ------------------- | -------------- | ------------ | ------------------------------------------------------------ |
| CustomFormatter     |                |              | カスタム書式。                                               |
| EnforceUniqueValues | FALSE          | FALSE        | この列への情報の入力を必須にする。                           |
| Indexed             | FALSE          | FALSE        | 列がビューフィルターで使用するためにインデックス付けされている場合は **TRUE** |
| IMEMode             |                |              | IME の設定。active, inactive, auto (空文字を指定)            |
| NumLines            | 6              | 6            | 編集対象の行数 は、1 ～ 1,000 の間でなければなりません。     |
| RichText            | TRUE           | TRUE         | フィールドにリッチテキスト形式が表示されている場合は **TRUE** |
| RestrictedMode      | TRUE           | TRUE         | TRUEの場合、[メモ]フィールドに画像、表、ハイパーリンクなどの拡張リッチテキスト形式を含めたり、書式設定されたテキストをフィールドに貼り付けたりすることはできません。 |
| RichTextMode        | **Compatible** | **FullHtml** | Compatible, FullHtml                                         |
| IsolateStyles       | **FALSE**      | **TRUE**     | **RichText** 属性が **TRUE** で、**RichTextMode** 属性が **FullHtml** であるテキストフィールドの場合、この属性は、サーバーがフィールドの HTML を書き換えて、周囲のページのレンダリングに干渉しないようにすることを指定します。 |
| AppendOnly          | FALSE          | FALSE        | 既存テキストへの変更履歴の追加                               |

---

# 参考サイト

- [Field 要素 (List) | Microsoft Docs](https://docs.microsoft.com/sharepoint/dev/schema/field-element-list)
- [Add-PNPField: Add SharePoint columns with PowerShell | SPO Scripts](https://sposcripts.com/add-sharepoint-columns-with-powershell/#Add_Notes_Column)
- [SharePoint と Power Automate で稟議書を実装してみたメモ 2](https://1bed.allright.life/?p=3063)