PythonでWordの表に行や列 挿入したり削除したりする 

Word文書の表は、データを整理して表示するために使用することができます。テーブルを処理する中で、テーブルの構造を調整したり、異なるデータ表示のニーズに適応したりするために、行や列を挿入したり削除したりする必要が生じることがあります。以下では、PythonでWordの表に行や列を挿入したり削除したりする方法を紹介します：

* [PythonでWordの表に行を挿入する](#pythonでwordの表に行を挿入する) 
* [PythonでWordテーブルに列を挿入する](#pythonでwordテーブルに列を挿入する)
* [PythonでWordテーブルから指定した行や列を削除する](#pythonでwordテーブルから指定した行や列を削除する)

## Pythonライブラリのインストール
必要なPythonライブラリは[**Spire.Doc for Python**](https://www.e-iceblue.com/Introduce/doc-for-python.html)です。このPythonライブラリはほぼすべてのWord文書要素をサポートしており、Wordで表を作成したり操作したりすることができます。
> pip install Spire.Doc


## PythonでWordの表に行を挿入する
Spire.Doc for Pythonは、Wordテーブルの指定された位置に新しい行を挿入したり、テーブルの末尾に新しい行を追加するための2つの異なるメソッドを提供します。主なメソッドは以下の通りです：
* **`Table`** クラス：Word文書内の表を表します。
* **`Table.Rows.Insert(index,row)`** メソッド：表の指定された位置に行を挿入します。
* **`Table.AddRow()`** メソッド：表の最後に行を追加します。

**Pythonのコード：**
```python
from spire.doc import *
from spire.doc.common import *

# Word文書を読み込む
document = Document()
document.LoadFromFile("WordTable.docx")

# 最初のセクションを取得する
section = document.Sections[0]
# セクションの最初のテーブルを取得する
table = section.Tables[0] if isinstance(section.Tables[0], Table) else None

# 4列目として行を挿入する
table.Rows.Insert(3, table.AddRow())

# テーブルの最後に行を追加する
addedRow = table.AddRow()

# ドキュメントを保存する
document.SaveToFile("AddRows.docx", FileFormat.Docx2016)
document.Close()
```
![AddRows.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2811193/f4816b00-8b9b-d9b2-f14b-0a903699b5db.png)


## PythonでWordテーブルに列を挿入する
行の挿入とは異なり、列の挿入には直接呼び出せるメソッドはない。列の挿入の効果を得るには、各行のセルを指定された位置に挿入すればよい。その手順は以下の通りである：
1.	**`LoadFromFile()`** メソッドで Word ドキュメントを読み込みます；
2.	指定したセクションの指定したテーブルを取得する；
3.	表の各行を繰り返し処理します；
4.	セルを作成し、**`TableRow.Cells.Insert()`** メソッドを使用して、指定された位置の各行に挿入します；
5.	**`TableRow.AddCell()`** メソッドを使用して、各行の末尾に直接セルを追加することもできます；
6.	ドキュメントを保存します。

**Pythonのコード：**
```python
from spire.doc import *
from spire.doc.common import *

# Word文書を読み込む
document = Document()
document.LoadFromFile("WordTable.docx")

# 最初のセクションを取得する
section = document.Sections[0]

# セクションの最初のテーブルを取得する
table = section.Tables[0] if isinstance(section.Tables[0], Table) else None

# テーブルの各行を繰り返し処理する
for i in range(table.Rows.Count):
    # 指定した行を取得する
    row = table.Rows[i]

    # 行の3番目の位置にセルを挿入する
    cell = TableCell(document)  
    row.Cells.Insert(2, cell)

    # 新しいセルの幅を設定する
    row.Cells[2].SetCellWidth(40, CellWidthType.Point)

    # 行の最後に新しいセルを追加する
    cell = row.AddCell()

    # 新しいセルの幅を2列目と同じにする
    cell.Width = row.Cells[1].Width

# ドキュメントを保存する
document.SaveToFile("AddColumns.docx", FileFormat.Docx2016)
document.Close()
```
![AddColumns.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2811193/29adef6d-773b-e3fc-f740-e0e59d9ea0a2.png)


## PythonでWordテーブルから指定した行や列を削除する
行の挿入とは異なり、列の挿入には直接呼び出せるメソッドはない。列の挿入の効果を得るには、各行のセルを指定された位置に挿入すればよい。その手順は以下の通りである：

* 表の特定の行を削除するには、**`Table.Rows.RemoveAt()`** メソッドを直接呼び出して、インデックスで削除します。
* 指定した列を削除するには、テーブルの各行を繰り返し処理し、**`TableRow.Cells.RemoveAt()`** メソッドを使用して各行の指定したセルを削除する必要があります。

**Pythonのコード：**
```python
from spire.doc import *
from spire.doc.common import *

# Word文書を読み込む
document = Document()
document.LoadFromFile("WordTable.docx")

# 最初のセクションを取得する
section = document.Sections[0]

# セクションの最初のテーブルを取得する
table = section.Tables[0] if isinstance(section.Tables[0], Table) else None

# 2行目を削除
table.Rows.RemoveAt(1)

# テーブルの各行を繰り返し処理する
for i in range(table.Rows.Count):
    # 各行の3番目のセルを削除する
    row = table.Rows[i]
    row.Cells.RemoveAt(2)

# ドキュメントを保存する
document.SaveToFile("DeleteRowColumns.docx", FileFormat.Docx2016)
document.Close()
```


> ウォーターマークを削除するには？[クリックして1ヶ月のトライアルライセンスをリクエストする](https://www.e-iceblue.com/TemLicense.html)


***関連記事***
[*PythonでWordの表を作成する*](https://www.e-iceblue.com/Tutorials/Python/Spire.Doc-for-Python/Program-Guide/Table/Python-Create-Tables-in-a-Word-Document.html)
[*PythonでWordのテーブルを削除する*](https://www.e-iceblue.com/Tutorials/Python/Spire.Doc-for-Python/Program-Guide/Table/Python-Remove-Tables-in-Word.html)
[*PythonでWordから表を抽出する*](https://www.e-iceblue.com/Tutorials/Python/Spire.Doc-for-Python/Program-Guide/Table/Python-Extract-Tables-from-Word-Documents.html)