0
4

More than 1 year has passed since last update.

PythonによるExcelワークシートとXMLの相互変換

Posted at

XML(Extensible Markup Language)は超文書マークアップ言語であり、ファイル形式でもあります。XMLは、カスタムタグを設定でき、拡張性があり、読み書きしやすく、転送が容易などの特長があり、アプリケーション間のデータ交換の最も一般的なツールになっています。XML形式は、転送が容易で、開発者が表を操作しやすく、一般ユーザーに届ける際には、xlsやxlsxなどの形式で表示する必要があるため、ユーザーが読み書きしやすいです。本稿では、XMLファイルとExcelスプレッドシートの相互変換の方法について説明します。

本稿で紹介する方法では、Spire.XLS for Pythonが必要であり、公式ウェブサイトからダウンロードするか、pipでインストール(Dispatch 1.7.4も同時にインストール)することができます:

pip install Spire.XLS-for-Python
pip install plum-dispatch==1.7.4

ExcelスプレッドシートをXMLに変換する

SaveAsXML(fileName: str) メソッドまたは SaveToFile(fileName: str, FileFormat.XML) メソッドを使用して、ExcelワークブックをXMLファイルに変換することができます。XMLファイルに変換すると、フォント、フォントサイズなどのスタイルだけが保持されます。次に詳細な操作手順を示します:

  • Workbook クラスのオブジェクトを作成します。
  • Workbook.LoadFromFile() メソッドでExcel表を読み込みます。
  • Workbook.SaveAsXml() メソッドまたは Workbook.SaveToFile() メソッドで表をXMLファイルに変換して保存します。

Python

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

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

# Excelワークブックをロード
workbook.LoadFromFile("G:/文書/例.xlsx")

# XMLファイルに変換して保存
workbook.SaveAsXml("output/ワークブック.xml")

# workbook.SaveToFile("output/ワークブック.xml", FileFormat.XML)

ワークブック
XMLファイルとExcelスプレッドシートの相互変換

変換結果
ExcelスプレッドシートをXMLに変換する

標準的なXMLファイルをExcelワークシートに変換する

Excelの標準に準拠したXMLファイルであれば、ワークブックに直接変換することができます。操作手順は以下の通りです:

  • Workbook クラスのオブジェクトを作成します。
  • Workbook.LoadFromXml() メソッドでXMLファイルを読み込みます
  • Workbook.SaveToFile() メソッドでXMLファイルをExcelワークブックに変換して保存します。

Python

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

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

# XMLファイルをロード
workbook.LoadFromXml("output/ワークブック.xml")

# XMLファイルをExcelワークブックに変換して保存
workbook.SaveToFile("output/XMLからExcelへの変換.xlsx", FileFormat.Version2016)

変換結果
標準的なXMLファイルをExcelワークシートに変換する

XMLデータを読み取り、Excelワークブックに保存する

Excelの標準に準じていないXMLファイルの場合、その中のデータを読み取り、Excelワークブックに保存することで変換を実現することができます。
以下のXMLファイルを読み取るためのものです:

<students>
  <student>
    <姓名>ジョン</姓名>
    <年齢>25</年齢>
    <性別></性別>
    <住所>アメリカのどこかの町123番地</住所>
    <電話番号>(123) 456-7890</電話番号>
  </student>
  <student>
    <姓名>ジェーン</姓名>
    <年齢>30</年齢>
    <性別></性別>
    <住所>アメリカのどこかの町456番地</住所>
    <電話番号>(123) 456-7891</電話番号>
  </student>
  <student>
    <姓名>ジャック</姓名>
    <年齢>35</年齢>
    <性別></性別>
    <住所>アメリカのどこかの町789番地</住所>
    <電話番号>(123) 456-7892</電話番号>
  </student>
  <student>
    <姓名>サラ</姓名>
    <年齢>28</年齢>
    <性別></性別>
    <住所>アメリカのどこかの町321番地</住所>
    <電話番号>(123) 456-7893</電話番号>
  </student>
  <student>
    <姓名>デイビッド</姓名>
    <年齢>40</年齢>
    <性別></性別>
    <住所>アメリカのどこかの町654番地</住所>
    <電話番号>(123) 456-7894</電話番号>
  </student>
  <student>
    <姓名>エミリー</姓名>
    <年齢>22</年齢>
    <性別></性別>
    <住所>アメリカのどこかの町987番地</住所>
    <電話番号>(123) 456-7895</電話番号>
  </student>
  <student>
    <姓名>マイケル</姓名>
    <年齢>33</年齢>
    <性別></性別>
    <住所>アメリカのどこかの町246番地</住所>
    <電話番号>(123) 456-7896</電話番号>
  </student>
  <student>
    <姓名>レイチェル</姓名>
    <年齢>27</年齢>
    <性別></性別>
    <住所>アメリカのどこかの町135番地</住所>
    <電話番号>(123) 456-7897</電話番号>
  </student>  
</students>

詳細な操作手順は以下の通りです:

  • Workbook クラスのオブジェクトを作成します。
  • XMLデータをロードします。
  • 最初のstudentノードを取得して列数とヘッダーを決定します。
  • Worksheet.Name プロパティを通してワークシートの名前を設定します。
  • Worksheet.SetValue() メソッドでデータを書き込みます。
  • Workbook.SaveToFile() メソッドでワークブックを新しい Excel ファイルとして保存します。

Python

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

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

# XMLデータをロード
xml_tree = ET.parse("G:/文書/例.xml")
xml_root = xml_tree.getroot()

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

# ワークシートを追加し、ワークシート名を設定
worksheet_name = xml_root.tag
worksheet = workbook.Worksheets[0]
worksheet.Name = worksheet_name

# ヘッダーを書き込む
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
        worksheet.SetValue(row_index, col_index, value)
    row_index += 1

# ワークブックを新しいExcelファイルとして保存
workbook.SaveToFile("output/new_workbook.xlsx")

結果ファイル
XMLデータを読み取り、Excelワークブックに保存する

以上がXMLとExcelシートの相互変換についての紹介です。Spire.XLS for Pythonには他にも多くの機能がありますので、Spire.XLS for Pythonのチュートリアルで詳細をご覧いただけます。何か問題があれば、Spire.XLSのフォーラムで議論に参加してください。

0
4
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
0
4