PythonでExcelシートにデータを書き込む（テキスト、配列、XML、CSV）

データ処理やレポート作成などの作業では、Excelシートは一般的で広く使用されるツールです。しかし、大量のデータを手動でExcelシートに入力することは時間がかかり、エラーが発生しやすいです。効率を向上させ、エラーを減らすために、Pythonプログラミング言語を使用してデータのExcelシートへの自動書き込みを行うことは賢明な選択です。Pythonは、シンプルで習得しやすく、強力なプログラミング言語として、Excelファイルの操作を含むさまざまなタスクを処理するための豊富なモジュールを提供しています。Pythonコードを書くことで、小規模なデータセットから大規模なデータ処理まで、データのExcelシートへの自動書き込みプロセスを容易に行うことができます。これにより、作業効率が大幅に向上し、人為的なミスが減少します。

本記事では、**Pythonを使用してデータをExcelシートに書き込む方法**について説明し、効率的で正確なExcelシートデータの書き込みソリューションを提供し、データ処理のプロセスを簡素化し、貴重な時間とエネルギーを節約する方法について詳しく説明します。以下に、主要な内容を示します：

- **[Excelデータの書き込みに関する概要](#excelデータの書き込みに関する概要)**
- **[Pythonでテキストや数値データをExcelセルに書き込む方法](#pythonでテキストや数値データをexcelセルに書き込む方法)**
- **[Pythonを使用して配列をExcelワークシートに書き込む方法](#pythonを使用して配列をexcelワークシートに書き込む方法)**
- **[PythonでCSVデータをExcelワークシートに書き込む方法](#pythonでcsvデータをexcelワークシートに書き込む方法)**
- **[PythonでXMLデータをExcelワークシートに書き込む方法](#pythonでxmlデータをexcelワークシートに書き込む方法)**

この記事で使用する方法には、[Spire.XLS for Python](https://www.e-iceblue.com/Download/Spire-XLS-Python.html)が必要です。公式ウェブサイトからダウンロードするか、PyPIを介してインストールできます：`pip install Spire.XLS`。

## Excelデータの書き込みに関する概要
- この記事で使用するAPIでは、**Workbook**クラスを使用してExcelワークブックを表します。Excelワークブックを操作する際には、このクラスの**LoadFromFile()**メソッドを使用してExcelワークブックをファイルから読み込んで操作するか、**Workbook**オブジェクトを作成して直接ワークブックを作成することができます。新しく作成されたExcelワークブックには、デフォルトで3つのワークシートがあります。
- 同様に、このAPIは**Worksheet**クラスと一連のメソッド、プロパティを提供しており、ワークシートやセルのデータ、書式などを操作することができます。
- テーブルデータの主なソースは、CSVファイル、テキスト、配列、XMLファイルなどがあります。レポートなどの表示や分析に便利な表を作成する場合、これらのタイプのテーブルデータをプログラムでExcelシートに書き込むことで、効率的かつ正確な表の生成が可能です。
- **Worksheet.Range[str]** プロパティは、指定したセルまたはセル範囲を取得するために使用されます。セルとセル領域はExcelと同じ方法で表現されます。例えば、「A1」や「A1:C3」です。
- **Workbook.SaveToFile(str, FileFormat= "xlsx")** メソッドを使用して、変更を加えたExcelワークブックを保存します。第1引数には保存するファイル名を指定し、第2引数にはファイル形式を指定します。デフォルトでは、ファイル形式はxlsx（Excel 2007以降の形式）です。

## Pythonでテキストや数値データをExcelセルに書き込む方法
**Workbook**クラスを使用してExcelワークブックを直接作成するか、既存のワークブックをロードした後、このクラスのメソッドを使用して書式を設定し、データを書き込むことができます。以下は、テキストや数値をExcelセルに書き込むための操作例です：
1. 必要なモジュールをインポートする。
2. **Workbook*** クラスのオブジェクトを作成して、Excel ワークブックを作成します。
3. **Workbook.Worksheets.Clear()** メソッドを使用してデフォルトのワークシートを削除し、**Workbook.Worksheets.Add()** メソッドを使用して新しいワークシートを作成します。
4. **Worksheet** クラスのプロパティを使用して、セルの書式を設定します。
5. **Worksheet.Range[]** を使って、指定したセルにテキストや値を追加する。
6. **Workbook.SaveToFile()** メソッドを使用して、ワークブックをファイルに保存し、ワークブックを閉じます。

**コード例:**
```python
from spire.xls import Workbook
from spire.xls import Worksheet
from spire.xls import FileFormat

# Excelブックを作成します
workbook = Workbook()

# ワークシートを削除して新しいワークシートを作成します
workbook.Worksheets.Clear()
worksheet = workbook.Worksheets.Add("メンバー情報")

# セルの書式を設定します
worksheet.Range["A1:D1"].Style.Font.IsBold = True
worksheet.Rows[0].RowHeight = 30
worksheet.Range["A1:D1"].Style.Font.Size = 12
worksheet.Range["A2:D4"].Style.Font.Size = 11

# ヘッダーデータを書き込みます
worksheet.Range["A1"].Text = "序号"
worksheet.Range["B1"].Text = "姓名"
worksheet.Range["C1"].Text = "年齢"
worksheet.Range["D1"].Text = "職業"

# 他のデータを書き込みます
worksheet.Range["A2"].Text = "1"
worksheet.Range["A3"].Text = "2"
worksheet.Range["A4"].Text = "3"

worksheet.Range["B2"].Text = "ジョン"
worksheet.Range["B3"].Text = "ジョーイ"
worksheet.Range["B4"].Text = "マイク"

worksheet.Range["C2"].Text = "35"
worksheet.Range["C3"].Text = "28"
worksheet.Range["C4"].Text = "42"

worksheet.Range["D2"].Text = "エンジニア"
worksheet.Range["D3"].Text = "弁護士"
worksheet.Range["D4"].Text = "医師"

# ワークブックを保存します
workbook.SaveToFile("output/セルにデータを書き込む.xlsx", FileFormat.Version2016)
workbook.Dispose()
```

**出力されるExcelワークブック:**
![Pythonでテキストや数値データをExcelセルに書き込む](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/caf21e34-079f-830b-32c9-8c0ff2041bb5.png)

## Pythonを使用して配列をExcelワークシートに書き込む方法
**Worksheet.InsertArray(arrObject: List[], firstRow: int, firstColumn: int, isVertical: bool)** メソッドを使用すると、配列をExcelワークシートに挿入し、挿入位置と方法を設定することができます。以下は操作手順の概要です：
1. 必要なモジュールをインポートします。
2. Excelワークブックを作成するために **Workbook** オブジェクトを作成します。
3. **Workbook.Worksheets.Clear()** メソッドを使用してデフォルトのワークシートをクリアし、 **Workbook.Worksheets.Add()** メソッドを使用して名前が「売上データ」となる新しいワークシートを作成します。
4. **Worksheet** クラスのプロパティを使用してセルの書式を設定します。
5. tableArrayという2次元配列を作成し、ワークシートに挿入するデータを含めます。
6. 2次元配列の各リストを反復処理し、 **Worksheet.InsertArray()** メソッドを使用してリストのデータをワークシートの指定したセルに挿入します。
7. **Workbook.SaveToFile()** メソッドを使用してワークブックを指定されたファイルに保存し、ワークブックを閉じます。

**コード例：**
```python
from spire.xls import Workbook
from spire.xls import FileFormat

# エクセルのワークブックを作成
workbook = Workbook()

# デフォルトのシートをクリアして新しいシートを作成します
workbook.Worksheets.Clear()
worksheet = workbook.Worksheets.Add("売上データ")

# セルのフォーマットを設定します
worksheet.Range["A1:D1"].Style.Font.IsBold = True
worksheet.Rows[0].RowHeight = 30
worksheet.Range["A1:D1"].Style.Font.Size = 12
worksheet.Range["A2:D4"].Style.Font.Size = 11

# 配列
tableArray = [
    ["日付", "製品", "売上高"],
    ["20220101", "製品A", "1000"],
    ["20220101", "製品B", "1500"],
    ["20220102", "製品A", "1200"],
    ["20220102", "製品B", "1800"],
    ["20220103", "製品A", "900"],
    ["20220103", "製品B", "1600"]
]

# データをシートに挿入します
i = 1
for array in tableArray:
    worksheet.InsertArray(array, i, 1, False)
    i += 1

# ワークブックを保存します
workbook.SaveToFile("output/配列をシートに書き込む.xlsx", FileFormat.Version2016)
workbook.Dispose()
```

**出力されるExcelワークブック：**
![Pythonを使用して配列をExcelワークシートに書き込](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/55c50eef-0d22-017f-a7d1-3c60fab09cd5.png)

## Pythonを使用してCSVデータをExcelワークシートに書き込む方法
CSVデータをExcelシートに書き込む場合、 **Workbook.LoadFromFile()** メソッドを使用してCSVファイルを直接読み込み、XLSX形式で保存することで、CSVファイルを直接Excelワークブックに変換することができます。CSVファイルを読み込む際には、区切り文字を引数として渡すことで、異なる区切り文字のCSVテーブルを読み込むこともできます。以下は操作の例です：
1. 必要なモジュールをインポートします。
2. **Workbook**クラスのオブジェクトを作成します。
3. **Workbook.LoadFromFile()** メソッドを使用してCSVファイルを読み込みます。
4. **Workbook.SaveToFile()** メソッドを使用してCSVファイルをExcelワークブックとして保存します。

**コード例：**
```python
from spire.xls import Workbook
from spire.xls import FileFormat

# Workbookクラスのオブジェクトを作成します
workbook = Workbook()

# CSVファイルを読み込みます
workbook.LoadFromFile("売上統計.csv", ",")

# Excelワークブックとして保存します
workbook.SaveToFile("output/CSVデータをシートに書き込む.xlsx", FileFormat.Version2016)
workbook.Dispose()
```

**保存される結果：**
![Pythonを使用してCSVデータをExcelワークシートに書き込む](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/0e3c9744-10fa-8b30-20d1-8b00a3e9517b.png)

## Pythonを使用してXMLデータをExcelワークシートに書き込む方法
XMLデータをExcelワークシートに書き込むには、まずXMLデータを読み取り、ヘッダーをワークシートに書き込み、その後、対応するデータをセルに書き込む必要があります。XMLテーブルデータの構造に応じてコードを調整する必要があります。
以下は操作手順の概要です：
1. 必要なモジュールをインポートします。
2. **Workbook**クラスのオブジェクトを作成します。
3. デフォルトのワークシートをクリアし、**Workbook.Worksheets.Add(str Name)** メソッドを使用してワークシートを追加します。
4. ワークシートのセルの書式を設定します。
5. XMLデータをロードし、xml.etree.ElementTreeモジュールのparseメソッドを使用してXMLファイルを解析し、ルート要素と子要素を取得します。
6. 最初のstudentノードを取得して列数とヘッダーを決定します。
7. ヘッダーを書き込みます。ヘッダーノードを反復処理し、列の見出しとしてワークシートに書き込みます。
8. データを書き込みます。各学生ノードと対応するデータノードを反復処理し、**Worksheet.SetValue(int rowIndex, int columnIndex, str Value)** メソッドを使用してデータ値をワークシートに書き込みます。
9. **SaveToFile()**メソッドを使用してワークブックを指定したパスにExcelファイルとして保存し、リソースを解放します。

**コード例：**
```python
from spire.xls import Workbook
from spire.xls import FileFormat
import xml.etree.ElementTree as ET

# Workbookクラスのオブジェクトを作成します
workbook = Workbook()

# デフォルトのシートをクリアして新しいシートを追加します
workbook.Worksheets.Clear()
worksheet = workbook.Worksheets.Add("学生情報")

# セルのフォーマットを設定します
for i in range(len(worksheet.Columns)):
    col = worksheet.Columns.get_Item(i)
    col.ColumnWidth = 10

# XMLデータを読み込みます
xml_tree = ET.parse("学生情報.xml")
xml_root = xml_tree.getroot()

# 最初のorderノードを取得して列数とヘッダーを決定します
first_student = xml_root.find("student")
header = list(first_student.iter())[1:]  # 最初のノードをスキップします

# ヘッダーを書き込みます
for col_index, header_node in enumerate(header, start=1):
    header_text = header_node.tag
    worksheet.SetValue(1, col_index, header_text)

# データを書き込みます
row_index = 2
for student in xml_root.iter("student"):
    for col_index, data_node in enumerate(list(student.iter())[1:], start=1):  # 最初のノードをスキップします
        value = data_node.text
        header_text = list(header[col_index - 1].iter())[0].tag
        worksheet.SetValue(row_index, col_index, value)
    row_index += 1

# ワークブックを新しいExcelファイルとして保存します
workbook.SaveToFile("output/XMLをシートに書き込む.xlsx", FileFormat.Version2016)
workbook.Dispose()
```

**一部のXMLデータ：**
```xml
<?xml version="1.0" encoding="UTF-8"?>
<students>
  <student>
    <id>1</id>
    <name>John Doe</name>
    <major>Data Science</major>
    <gpa>3.8</gpa>
    <age>20</age>
    <gender>Male</gender>
    <contact>
      <email>john.doe@example.com</email>
      <phone>123-456-7890</phone>
    </contact>
  </student>
```

**出力されるExcelワークブック：**
![Pythonを使用してXMLデータをExcelワークシートに書き込む](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/fabe98c6-88d5-99d4-f761-d30c6048497a.png)

### 総括
この記事では、Pythonを使ってテキスト、配列、XML、CSVなどのさまざまなデータをExcelのスプレッドシートとして保存する方法について紹介しました。Pythonのコードを使用することで、さまざまなデータをExcelのワークシートに簡単に保存し、一括処理を行い、視覚的に魅力的なスプレッドシートを素早く生成することができます。Spire.XLS for Pythonには他にも多くの機能がありますので、[Spire.XLS for Pythonのチュートリアル](https://www.e-iceblue.com/Tutorials/Python/Spire.XLS-for-Python/Program-Guide/Spire.XLS-for-Python-Program-Guide-Content.html)にアクセスしてご覧ください。もし問題が発生した場合は、[Spire.XLSフォーラム](https://www.e-iceblue.com/forum/spire-xls-f4.html)で技術サポートを受けることもできます。