1
0

PythonでExcelのワークシートデータをCSV、XML、テキストに書き込む

Last updated at Posted at 2024-03-15

Excelワークブックは一般的なスプレッドシート形式であり、多くのデータの表示、データ分析、データレポートに使用されます。しかし、実際のデータ管理、分析、または自動化プロセスの構築では、これらのExcelデータを他のデータシステムに移行したり、他のプログラムとのインタラクションのためにテキスト形式で保存したりする必要があります。Pythonは強力で柔軟なプログラミング言語であり、この目的を効率的に達成することができます。この記事では、Pythonプログラミング言語を使用してExcelワークシートの豊富なデータをCSV、XML、またはテキストにインポートする方法を示します。また、記事中の方法を使用してデータを他のファイルやデータシステムに読み込み、書き込むこともできます。

この記事では、Spire.XLS for Pythonを使用します。公式ウェブサイトから入手するか、PyPIを通じてインストールできます:pip install Spire.XLS

無料ライセンスの申請

サンプルExcelファイル

PythonでExcelファイルを読み込む

Excelワークシートを直接CSVに変換する

このAPIを使用すると、指定したワークシートを直接CSVファイルに変換できます。以下に手順を示します:

  1. 必要なモジュールをインポートします。
  2. Workbookクラスのオブジェクトwbを作成します。
  3. wb.LoadFromFile()メソッドを使用して指定されたパスのExcelファイルをロードします。
  4. 指定したインデックス位置のワークシートwsを取得します。
  5. Worksheet.SaveToFile(string fileName, string Separator, Encoding)メソッドを使用してワークシートをCSVファイルに変換し、保存します。
  6. リソースを解放します。

コード例

from spire.xls import *
from spire.xls.common import *

# Workbookオブジェクトの作成
wb = Workbook()

# Excelファイルの読み込み
wb.LoadFromFile("サンプル.xlsx")

# ワークシートの取得
ws = wb.Worksheets.get_Item(0)

# ワークシートをCSVファイルとして保存
ws.SaveToFile(f"output/{ws.Name}.csv", ",", Encoding.get_UTF8())
wb.Dispose()

抽出結果
Python ExcelをCSVに変換

Excelワークシートのデータを読み込んでCSVに保存する

直接変換するだけでなく、指定したセル範囲のデータを読み込み、CSVファイルに書き込むことで、カスタムのデータ抽出を実現することもできます。以下は手順です:

  1. 必要なモジュールをインポートします。
  2. Workbookクラスのオブジェクトwbを作成します。
  3. wb.LoadFromFile()メソッドを使用して指定されたパスのExcelファイルをロードします。
  4. 指定したインデックス位置のワークシートwsを取得します。
  5. ワークシートの使用範囲(つまりデータが存在する部分)をusedRangeとして確定します。
  6. usedRangeの各行と各列を反復処理します:
    • セルの値を取得し、カンマを含む文字列のセルの値にはダブルクォーテーションを追加します。
    • 処理されたセルの値をrowDataリストに追加します。
  7. 各行のrowDataリストを処理し、カンマ区切りの文字列に変換し、末尾に改行文字を追加してdata文字列に結果を追加します。
  8. CSVファイル(現在のワークシート名で命名)を書き込みモードとUTF-8エンコーディングで開き、data文字列の内容をファイルに書き込みます。
  9. wb.Dispose()メソッドを使用してリソースを解放し、メモリをクリアします。

コード例

from spire.xls import *
from spire.xls.common import *

# Workbookオブジェクトの作成
wb = Workbook()

# Excelファイルの読み込み
wb.LoadFromFile("サンプル.xlsx")

# ワークシートの取得
ws = wb.Worksheets.get_Item(0)

# 使用範囲の取得
usedRange = ws.AllocatedRange

data = ""
# 使用範囲の繰り返し処理
for i in range(1, usedRange.Rows.Count + 1):
    rowData = []
    for j in range(1, usedRange.Columns.Count + 1):
        # セルの値の取得
        cellValue = usedRange[i, j].Value
        # カンマを含むデータには引用符を追加
        if isinstance(cellValue, str) and ',' in cellValue:
            cellValue = f'"{cellValue}"'
        rowData.append(str(cellValue))
    data += ",".join(rowData) + "\n"

# データをCSVファイルに書き込む
with open(f"output/CSV/{ws.Name}.csv", "w", encoding='utf-8') as f:
    f.write(data)
wb.Dispose()

抽出結果
PythonワークシートデータをCSVに書き込む

ExcelワークブックをOpenXMLに変換する

WorkbookクラスのSaveAsXmlメソッドを使用すると、ワークブックを直接Open XMLファイルに変換できます。以下は手順です:

  1. 必要なモジュールをインポートします。
  2. Workbookクラスのオブジェクトwbを作成します。
  3. wb.LoadFromFile()メソッドを使用して指定されたパスのExcelファイルをロードします。
  4. Workbook.SaveAsXml()メソッドを使用してワークブックをOpen XMLファイルに変換し、保存します。
  5. リソースを解放します。

コード例

from spire.xls import *
from spire.xls.common import *

# Workbookオブジェクトの作成
wb = Workbook()

# Excelファイルの読み込み
wb.LoadFromFile("サンプル.xlsx")

# OpenXMLファイルとして保存
wb.SaveAsXml("output/WorkbookToOpenXML.xml")
wb.Dispose()

抽出結果
Python ExcelをOpen XMLに変換

Excelワークシートのデータを読み込んでXMLに書き込む

ワークブックを直接Open XMLファイルに変換するだけでなく、表データを読み込んでカスタムのXMLファイルを作成することもできます。xml.etree.ElementTreeを導入してXMLの書き込みを容易にすることができます。以下は手順の例です:

  1. 必要なモジュールをインポートします。
  2. Workbookクラスのオブジェクトwbを作成します。
  3. wb.LoadFromFile()メソッドを使用して指定されたパスのExcelファイルをロードします。
  4. インデックスが0のワークシートwsを取得します。
  5. ワークシートの使用範囲usedRangeを取得します。
  6. "Worksheet"という名前のXMLのルート要素rootを作成します。
  7. XMLのルート要素の下に"Name"という子要素を作成し、そのテキストコンテンツを現在のワークシートの名前に設定します。
  8. 使用範囲(行単位)を反復処理します:
    • 各行に対して、"Row"という子要素を作成します。
    • その行の各セルを反復処理します(列単位):
      • セルの値を取得します。
      • "Row"要素の下に"Cell"という子要素を作成します。
      • "Cell"要素の下にさらに"Data"という子要素を作成し、セルの値を文字列に変換してそのテキストコンテンツに設定します。
  9. 生成されたすべてのXML要素を完全なXMLツリー構造に組み立て、xml_tree変数に保存します。
  10. xml_tree.write()メソッドを使用してXMLデータを「ワークシート書き込みXML.xml」という名前のファイルに書き込みます。同時にUTF-8エンコーディングとXML宣言を指定します。
  11. 最後に、wb.Dispose()メソッドを呼び出してリソースを解放し、Excelワークブックオブジェクトを閉じてクリーンアップします。

コード例

import xml.etree.ElementTree as ET
from spire.xls import *
from spire.xls.common import *

# Workbookオブジェクトの作成
wb = Workbook()

# Excelファイルの読み込み
wb.LoadFromFile("サンプル.xlsx")

# ワークシートの取得
ws = wb.Worksheets.get_Item(0)

# 使用範囲の取得
usedRange = ws.AllocatedRange

# XMLのルート要素を作成
root = ET.Element("Worksheet")

# ワークシート名を設定
name_element = ET.SubElement(root, "Name")
name_element.text = ws.Name

# 使用範囲の繰り返し処理
for i in range(1, usedRange.Rows.Count + 1):
    row_element = ET.SubElement(root, "Row")
    for j in range(1, usedRange.Columns.Count + 1):
        # セルの値の取得
        cellValue = usedRange[i, j].Value
        # セル要素の作成
        cell_element = ET.SubElement(row_element, "Cell")
        # データ要素の作成
        data_element = ET.SubElement(cell_element, "Data")
        data_element.text = str(cellValue)

# XMLドキュメントの作成
xml_tree = ET.ElementTree(root)
# データをXMLファイルに書き込む
xml_tree.write("output/XML/WorksheetToXML.xml", encoding="utf-8", xml_declaration=True)
wb.Dispose()

抽出結果
Python ExcelワークシートをXMLに書き込む

Excelワークシートのデータをテキストとして保存する

データを直接変換するだけでなく、Excelのワークシートからデータを読み込んでテキストファイルに保存することもできます。以下は手順です:

  1. 必要なモジュールをインポートします。
  2. Workbookクラスのインスタンスwbを初期化します。
  3. wb.LoadFromFile()関数を使用してExcelファイルをロードします。
  4. インデックス0のワークシートを選択し、変数wsに代入します。
  5. ワークシートの使用範囲を取得し、変数usedRangeに格納します。
  6. 空の文字列dataを初期化し、すべてのセルのデータを収集するために使用します。
  7. 使用範囲の行と列を反復処理します:
    • 各行について(2行目から開始します。Excelのインデックスは1から始まるため)、次の操作を行います:
      • その行の各セルについて:
        • セルの値を取得し、文字列に変換してdataの末尾に追加します。
        • 現在のセルが行内の最後のセルでない場合、タブ文字\tを追加してデータを区切ります。
      • 1行のすべてのセルの処理が完了したら、dataの末尾に改行文字\nを追加します。これにより、出力時に異なる行のデータを区別します。
  8. with open()文を使用して新しいファイルを「書き込み」モードで開きます。ファイル名は現在のワークシートの名前に基づいて拡張子.txtを付けたものであり、パスは「output/」ディレクトリに設定されます。
  9. 事前に結合したすべてのセルデータを含む文字列dataを、作成したテキストファイルに書き込みます。
  10. ファイルストリームを閉じて、データが正常に書き込まれたことを確認します。
  11. wb.Dispose()メソッドを呼び出してリソースを解放し、Excelのワークブックオブジェクトを閉じてクリーンアップします。

コード例

from spire.xls import *
from spire.xls.common import *

# Workbookオブジェクトの作成
wb = Workbook()

# Excelファイルの読み込み
wb.LoadFromFile("サンプル.xlsx")

# ワークシートの取得
ws = wb.Worksheets.get_Item(0)

# 使用範囲の取得
usedRange = ws.AllocatedRange

data = ""
# 使用範囲の繰り返し処理
for i in range(1, usedRange.Rows.Count + 1):
    for j in range(1, usedRange.Columns.Count + 1):
        # セルの値の取得
        cellValue = usedRange[i, j].Value
        data += str(cellValue)
        if j < usedRange.Columns.Count:
            data += "\t"
    data += "\n"

# データをテキストファイルに書き込む
with open(f"output/{ws.Name}.txt", "w", encoding='utf-8') as f:
    f.write(data)
wb.Dispose()

抽出結果
Python Excelワークシートデータをテキストに書き込む

以上の内容は、Pythonを使用してExcelデータをCSV、XML、テキストファイルに変換する方法を示しています。
その他のExcel操作記事
技術サポート

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0